51nod 1201 整數劃分

2022-05-19 19:43:11 字數 683 閱讀 6564

給出乙個整數n,將n分為若干個不同整數的和,求有多少種不同的劃分方式

dp設f[i][j]表示用i個數組成j的方案數,因為n<=50000,而且劃分出來的數要不同,所以最多只能分成320(還要小一點)個數的和,所以i最大為320

轉移=f[i][j-i]+f[i-1][j-i]

前者表示j分成的i個數中不包括1的方案數(因為將j-i相當於將i個數都-1,自然一開始就不可能有1)

後者表示j分為的i個數中包括1的方案數(因為原本有1,所以-1之後就變成了i-1個數了)  

這轉移卡了一會,有點菜。。

#include#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;int f[410][51000],mod=1e9+7

;int

main()

}int ans=0

;

for(int i=1;i<=320;i++) ans=((ll)ans+(ll)f[i][n])%mod;

printf(

"%d\n

",ans);

return0;

}

51nod 1201 整數劃分

將n分為若干個不同整數的和,有多少種不同的劃分方式,例如 n 6,共4種。由於資料較大,輸出mod 10 9 7的結果即可。1 n 50000 直接一看就想到是一道最簡單揹包問題 但n 50000 然後我就直接上揹包,結果毫無疑問的超時,然後我的乙個夥伴在打二維揹包暴力時手抖打錯打出了正解 我們設f...

51nod 1201 整數劃分

1201 整數劃分 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 將n分為若干個不同整數的和,有多少種不同的劃分方式,例如 n 6,共4種。由於資料較大,輸出mod 10 9 7的結果即可。input 輸入1個數n 1 n 50000 output 輸出劃分的數...

51nod 1201 整數劃分

dp轉移方程 dp i j dp i j j dp i j j 1 dp i j 表示將i分成j個不相等的數的個數。dp i j j dp i j 表示給原先的j個數各加一 dp i j j 1 dp i j 表示給原先的j 1的數加1,再附帶個1.因為不相等的數,所以n n 1 2 5e4 5,n...