程式設計與演算法(二)簡單的整數劃分問題

2021-09-27 19:21:22 字數 739 閱讀 7504

題目

將正整數n 表示成一系列正整數之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。

正整數n 的這種表示稱為正整數n 的劃分。正整數n 的不同的劃分個數稱為正整數n 的劃分數。

輸入

標準的輸入包含若干組測試資料。每組測試資料是乙個整數n(0 < n <= 50)。

輸出

對於每組測試資料,輸出n的劃分數。

樣例輸入

樣例輸出

提示

5, 4+1, 3+2, 3+1+1, 2+2+1, 2+1+1+1, 1+1+1+1+1

思路

用動態規劃做類似揹包問題,dp(n, i)的值為選i (dp(n-i, i))和不選i (dp(n, i-1)) 之和,當然這是在n >= i 時的情況。當 n = 0 時,只有n個0相加這一種方案,故dp(n, i) = 1。當i = 0 時,劃分不包含0,也就是不會有一種劃分會加0,故dp(n, i) = 0。最後一種情況,當n < i 時,dp(n, i) = dp(n, i-1)。

用遞迴做也是這四種情況,只不過用的是遞迴函式ÿ

簡單整數劃分問題

1.純遞迴 設函式func int n,int m 定義為計算 把整數 n 劃分為 小於或等於 m 的一系列數字之和 的劃分方法有多少種,則對於 1 當 n 1 時,無論 m 取何值,都只能 劃分為 1 2 當 m 1 時 無論 n 為何值,也只能劃分為 n 個 1 相加 只有一種劃分方法 3 當 ...

簡單的整數劃分問題

總時間限制 100ms 記憶體限制 65536kb 描述 將正整數n 表示成一系列正整數之和,n n1 n2 nk,其中n1 n2 nk 1 k 1 正整數n 的這種表示稱為正整數n 的劃分。正整數n 的不同的劃分個數稱為正整數n 的劃分數。輸入標準的輸入包含若干組測試資料。每組測試資料是乙個整數n...

整數劃分問題 演算法

在遞迴裡,要對形參進行判斷 1 當n 1時 q 1,m 表示是對1的劃分,那麼只有一種劃分方式 1 2 當m 1時q n,1 當m 1時其實就是把讓所有加數小於等於1,那就是所有加數都是1咯 不考慮負數 當然也只有一種劃分方式 3 當n m時q n,n 此時就是對n的劃分出來的數沒有限制,預設限制就...