NYOJ90 整數劃分(計數DP)

2021-08-17 16:12:21 字數 833 閱讀 7365

時間限制:

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)。

輸出輸出每組測試資料有多少種分法。

樣例輸入

1

6

樣例輸出

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...