動態規劃 整數拆分

2021-09-22 21:14:49 字數 768 閱讀 5806

時間限制:1秒 空間限制:65536k 熱度指數:8566

乙個整數總可以拆分為2的冪的和,例如: 7=1+2+4 7=1+2+2+2 7=1+1+1+4 7=1+1+1+2+2 7=1+1+1+1+1+2 7=1+1+1+1+1+1+1 總共有六種不同的拆分方式。 再比如:4可以拆分成:4 = 4,4 = 1 + 1 + 1 + 1,4 = 2 + 2,4=1+1+2。 用f(n)表示n的不同拆分的種數,例如f(7)=6. 要求編寫程式,讀入n(不超過1000000),輸出f(n)%1000000000。

每組輸入包括乙個整數:n(1<=n<=1000000)。
對於每組資料,輸出f(n)%1000000000。
示例1

6
1. 用二維陣列dp會超出記憶體限制

2. 可以轉化為揹包問題,21種物品,每乙個可以重複取,問能恰好達道固定重要重量的選取的方案數。

dp[i][j] 表示在前i個物品中恰好選到重量為j的方案數,那麼則有:

dp[i][j] = dp[i-1][j](不選第i個物品)+dp[i][j-a[j]](至少選乙個第i個物品)

可以在迴圈中簡化為:

dp[j] += dp[j-a[i]]

#includeusing namespace std;

int dp[1000005];

int main()

}while(scanf("%d", &n) != eof)

return 0;

}

動態規劃 整數拆分(純DP)

name 整數拆分 兩種做法 dp actor ht time 2015年9月28日 error reporte 1.初始化邊界處理 沒弄清 include include include include include include using namespace std define n 12...

動態規劃求解整數拆分問題

include define maxn 10 採用動態規劃求解整數拆分問題。設f n,k 為n的k拆分的拆分方案個數 其中,n表示被劃分的數,k表示被劃分出來的數中的可能出現的最大值,f n,k 的值表示劃分的方法個數 1 當n 1或者k 1時,顯然f n,k 1。2 當n 3 當n k時,其拆分方...

python 動態規劃實現整數拆分

我們先來看這樣乙個問題 把5拆分成若干無序正整數的和 若干可以包含1 請問有多少種拆分方法?直接用列舉法實現 5 5 5 4 1 5 3 2 5 3 1 1 5 2 2 1 5 2 1 1 1 5 1 1 1 1 1 很顯然,結果為7。注意這裡5 4 1和5 1 4是相同的,只計算為一種方法。如果計...