題目連結:
題目大意:
某一官員參加某次議會的可能情形有「出席」、「請假」、「請人代理」。
現給定一正整數 N ( 2 ≦ N ≦ 120, 000 ),代表某一官員要參加 N 次會議。而會議長希望這N次的會議,不要有兩次以上(含)的請假紀錄或是有連續三次(含)的請人代理。
以上,求所有可能的方法數,並將結果取 100000007 的餘數。
範例輸入:
範例輸入一:
2
範例輸入二:
3
範例輸出:
範例輸出一:
8
範例輸出二:
19
解題思維:
典型的DP(動態規劃)題。
首先,我們可以把所有合法的出勤狀況分成以下六種:
1.沒請過假,且目前最新幾次的出席為連續 0 次請人代理。
2.沒請過假,且目前最新幾次的出席為連續 1 次請人代理。
3.沒請過假,且目前最新幾次的出席為連續 2 次請人代理。
4.請過 1 次假,且目前最新幾次的出席為連續 0 次請人代理。
5.請過 1 次假,且目前最新幾次的出席為連續 1 次請人代理。
6.請過 1 次假,且目前最新幾次的出席為連續 2 次請人代理。
再定義 D(i, j),代表 i 次會議裡,出勤狀況為 j (以上六種)的方法數。我們便可以發現:
D(i, 0) = D(i - 1, 0) + D(i - 1, 1)+ D (i - 1, 2)
D(i, 1) = D(i - 1, 0)
D(i, 2) = D(i - 1, 1)
D(i, 3) = D(i - 1, 3) + D(i - 1, 4)+ D (i - 1, 5)+D(i - 1, 0) + D(i - 1, 1)+ D (i - 1, 2)
D(i, 4) = D(i - 1, 3)
D(i, 5) = D(i - 1, 4)
則i次會議中,合法的方法數即是
D(i, 0)+D(i, 1)+D(i, 2)+D(i, 3)+D(i, 4)+D(i, 5)
最後在每次運算的時候取一次 100000007 的餘數就可以了。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。