切換
舊版
前往
大廳
主題

ZeroJudge - c878: 107北二5.議會質詢紀錄 解題心得

Not In My Back Yard | 2018-12-04 20:05:15 | 巴幣 0 | 人氣 195

題目連結:


題目大意:
某一官員參加某次議會的可能情形有「出席」、「請假」、「請人代理」。

現給定一正整數 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 的餘數就可以了。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

心彩
DP[i][3] = (DP[i - 1][3] + DP[i - 1][4] + DP[i - 1][5] + DP[i][0]) % MOD; 這裡程式碼跟文章寫得不一樣 0次請假不管代幾 加了一次請假 不都是1次請假代0嗎?
2023-04-11 10:31:18
Not In My Back Yard
因為我在那邊偷懶了。
可以看到 DP[i][0] 是 DP[i - 1][0] + DP[i - 1][1] + DP[i - 1][2],也就是 DP[i][3] 後半段的部分。

所以實際上是對的。
2023-04-11 21:09:16

更多創作