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
233
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 對於每組測試資料,輸出以下三行資...