51nod 1201 整數劃分 dp

2022-05-16 21:33:31 字數 571 閱讀 4821

題解:顯然是一道dp,不妨設dp[i][j]表示數字i分成j個一共有幾種分法。

那麼轉移方程式為:

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

表示將i - 1劃分為j個數,然後j個數都+1 還是不重複,將i - 1劃分為j - 1個數,然後j - 1個數都+1,再加上1這個數。

然後就是j的範圍要知道1+2+3+.....+n=i顯然(1+n)*n/2=i,所以j的範圍最多就是sqrt(i)。

#include #include #include #include #define mod 1000000007

using namespace std;

const int m = 5e4 + 10;

int dp[m][400];

int main()

}int sum = 0;

for(int i = 1 ; i <= sqrt(2 * n) ; i++)

printf("%d\n" , (sum + mod) % mod);

return 0;

}

51nod 1201 整數劃分 dp

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

整數劃分 51Nod 1201 (經典dp)

將n分為若干個不同整數的和,有多少種不同的劃分方式,例如 n 6,共4種。由於資料較大,輸出mod 10 9 7的結果即可。input 輸入1個數n 1 n 50000 output 輸出劃分的數量mod 10 9 7。sample input 6sample output 4這道題 剛寫的時候 使...

51Nod 1201 整數劃分 經典dp

題意不多說了。dp i j 表示i這個數劃分成j個數的情況數。dp i j dp i 1 j dp i 1 j 1 前者表示將i 1劃分為j個數,然後j個數都 1 還是不重複 後者表示將i 1劃分為j 1個數,然後j 1個數都 1,再加上1這個數 普通的dp是n 2的,但是可以發現1 2 m n 1...