1. 程式人生 > >[NYOJ571] 整數劃分(三) [遞推計數][整數劃分]

[NYOJ571] 整數劃分(三) [遞推計數][整數劃分]

[ L i n k \frak{Link} ]
[ S

u m m a r y \frak{Summary} ]


輸入n,k。要求輸出:
第一行: 將n劃分成若干正整數之和的劃分數。
第二行: 將n劃分成k個正整數之和的劃分數。
第三行: 將n劃分成最大數不超過k的劃分數。
第四行: 將n劃分成若干個奇正整數之和的劃分數。
第五行: 將n劃分成若干不同整數之和的劃分數。
第六行: 列印一個空行


第六行是什麼鬼.gif

五個整數劃分的經典問題。
第一個問題。單純只有 n \mathcal{n} 的話並不好怎麼討論,考慮自己加限制。
能加的限制就是讓劃分出來的數不大於 m \mathcal{m}

F ( i , j ) \mathcal{F(i,j)}
分類討論:每個數都小於 j \mathcal{j} 還是有至少一個數為 j \mathcal{j}
第二種情況可以直接從 F ( i j , j ) \mathcal{F(i-j,j)} 轉移過來。
第一種情況就是 F ( i , j 1 ) \mathcal{F(i,j-1)}

第二個問題的討論

第三個問題被第一個問題討論了。

第四個問題由於全部奇偶性要相同,可以考慮對轉移的時候對所有數同時加一。
新劃分出一個數就是新加上一個一,這個要在奇數狀態下進行。
所以就跟第二個問題比較類似。不過得分奇偶性。

第五個問題跟第一個問題比較類似。
考慮套用的時候重複計數的部分、
顯然是第二種情況。
那麼第二種情況改成從 F ( i j , j 1 ) \mathcal{F(i-j,j-1)} 轉移。