複雜的整數劃分問題

2021-08-14 04:20:54 字數 1159 閱讀 9045

description

將正整數

n 表示成一系列正整數之和,

n=n1+n2+…+nk, 

其中n1>=n2>=…>=nk>=1 

,k>=1 

。正整數

n 的這種表示稱為正整數

n 的劃分。

input

標準的輸入包含若干組測試資料。每組測試資料是一行輸入資料,包括兩個整數n 和 k。 

(0 < n <= 50, 0 < k <= n)

output

對於每組測試資料,輸出以下三行資料:

第一行: n劃分成k個正整數之和的劃分數目

第二行: n劃分成若干個不同正整數之和的劃分數目

第三行: n劃分成若干個奇正整數之和的劃分數目

sample input

5 2

sample output

2

33

hint

第一行: 4+1, 3+2,

第二行: 5,4+1,3+2

第三行: 5,1+1+3, 1+1+1+1+1+1

快樂的dp,快樂的我.

一道比較複雜的簡單dp,狀態轉移方程比較容易確定.

但是一開始跑偏了,

開始以為第乙個問題的狀態轉移方程是這個,但是這樣時候重複的.

dp[n, i, k] = dp[n, i - 1, k] + dp[n - i, i, k - 1] + dp[n - i, i - 1, k - 1]

dp[n - i, i, k - 1] = dp[n - i, i - 1, k - 1] + ...

後來翻翻書,自己想了想就想通了.

現在感覺,這種dp問題,一是確認狀態轉移方程,二是邊界條件.

邊界條件挺煩人的...

#include#includeusing namespace std;

const int maxn = 60;

typedef long long ll;

ll dp1[maxn][maxn][maxn];

ll dp2[maxn][maxn];

ll dp3[maxn][maxn];

int main()

return 0;

}

7219 複雜的整數劃分問題

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

4119 複雜的整數劃分問題

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

複雜的整數劃分問題 百練4119

將正整數n 表示成一系列正整數之和,n n1 n2 nk,其中n1 n2 nk 1 k 1 正整數n 的這種表示稱為正整數n 的劃分。input 標準的輸入包含若干組測試資料。每組測試資料是一行輸入資料,包括兩個整數n 和 k。0 n 50,0 k n output 對於每組測試資料,輸出以下三行資...