時間限制:
3000 ms | 記憶體限制:
65535 kb
難度:3 描述
將正整數n表示成一系列正整數之和:n=n1+n2+…+nk,
其中n1≥n2≥…≥nk≥1,k≥1。
正整數n的這種表示稱為正整數n的劃分。求正整數n的不同劃分個數。
例如正整數6有如下11種不同的劃分:
6; 5+1;
4+2,4+1+1;
3+3,3+2+1,3+1+1+1;
2+2+2,2+2+1+1,2+1+1+1+1;
1+1+1+1+1+1。
輸入第一行是測試資料的數目m(1<=m<=10)。以下每行均包含乙個整數n(1<=n<=10)。
輸出輸出每組測試資料有多少種分法。
樣例輸入
16
樣例輸出
11
【分析】計數dp
題意即求 正整數n劃分為不多於n個數相加的形式 的分法。
因此我們可以設dp[i][j],表示 正整數i劃分為不多於j個數相加的形式 的分法。然後分以下4種情況討論即可。
#include #define maxn 15
int m,n;
int dp[maxn][maxn]; //dp[i][j]-正整數i劃分為不多於j個數相加的形式 的分法
int main()
} //最後dp[n][n]即為所求
printf("%d\n",dp[n][n]);
} return 0;
}
nyoj 90 整數劃分
整數劃分問題是演算法中的乙個經典命題之一,有關這個問題的講述在講解到遞迴時基本都將涉及。所謂整數劃分,是指把乙個正整數n寫成如下形式 n m1 m2 mi 其中mi為正整數,並且1 mi n 則為n的乙個劃分。如果中的最大值不超過m,即max m1,m2,mi m,則稱它屬於n的乙個m劃分。這裡我們...
NYOJ 90整數劃分
時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 將正整數n表示成一系列正整數之和 n n1 n2 nk,其中n1 n2 nk 1,k 1。正整數n的這種表示稱為正整數n的劃分。求正整數n的不 同劃分個數。例如正整數6有如下11種不同的劃分 6 5 1 4 2,4 1 1 3 ...
NYOJ 90 整數劃分
時間限制 3000 ms 記憶體限制 65535 kb 難度 3 輸入第一行是測試資料的數目m 1 m 10 以下每行均包含乙個整數n 1 n 10 輸出輸出每組測試資料有多少種分法。樣例輸入 1 6樣例輸出 11描述 將正整數n表示成一系列正整數之和 n n1 n2 nk,其中n1 n2 nk 1...