將正整數n 表示成一系列正整數之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。
正整數n 的這種表示稱為正整數n 的劃分。正整數n 的不同的劃分個數稱為正整數n 的劃分數。
input
標準的輸入包含若干組測試資料。每組測試資料是乙個整數n(0 < n <= 50)。
output
對於每組測試資料,輸出n的劃分數。
sample input
5sample output
7hint5, 4+1, 3+2, 3+1+1, 2+2+1, 2+1+1+1, 1+1+1+1+1
#include#include#include
#include
using
namespace
std;
intn;
int f[100][100];//和為i最大值為j
別人的**……
天竹幫我找的**寫了一遍,應該是揹包問題
#include#include就是和為i中分出的集合分別計算最大值是j的情況數,因為我們是從小到大列舉,所以我們已經把前面的序列情況找到;#include
using
namespace
std;
const
int maxn=60
;int
n,f[maxn][maxn],ans;
intmain()
}while(scanf("
%d",&n)==1
)
return0;
}
那怎麼轉移呢?為了不重複,我們要直接在已知的序列中加數,和為i可以從所有和為i-1最大值j-1的情況把最大值+1變成i,j;
也可以從和為i-j最大值為j的再加上j,最大值也沒有變;
記住我們是乙個個列舉的,最大值為1,最大值為2,最大值為3……
簡單的整數劃分問題
總時間限制 100ms 記憶體限制 65536kb 描述 將正整數n 表示成一系列正整數之和,n n1 n2 nk,其中n1 n2 nk 1 k 1 正整數n 的這種表示稱為正整數n 的劃分。正整數n 的不同的劃分個數稱為正整數n 的劃分數。輸入標準的輸入包含若干組測試資料。每組測試資料是乙個整數n...
openjudge 簡單的整數劃分問題
100ms 記憶體限制 65536kb 描述 將正整數n 表示成一系列正整數之和,n n1 n2 nk,其中n1 n2 nk 1 k 1 正整數n 的這種表示稱為正整數n 的劃分。正整數n 的不同的劃分個數稱為正整數n 的劃分數。輸入標準的輸入包含若干組測試資料。每組測試資料是乙個整數n 0 n 5...
4117 簡單的整數劃分問題
總時間限制 100ms 記憶體限制 65536kb 描述 將正整數n 表示成一系列正整數之和,n n1 n2 nk,其中n1 n2 nk 1 k 1 正整數n 的這種表示稱為正整數n 的劃分。正整數n 的不同的劃分個數稱為正整數n 的劃分數。輸入 標準的輸入包含若干組測試資料。每組測試資料是乙個整數...