簡單的整數劃分問題 兩個小時的死亡掙扎

2022-03-16 15:29:51 字數 1141 閱讀 3956

將正整數n 表示成一系列正整數之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。

正整數n 的這種表示稱為正整數n 的劃分。正整數n 的不同的劃分個數稱為正整數n 的劃分數。

input

標準的輸入包含若干組測試資料。每組測試資料是乙個整數n(0 < n <= 50)。

output

對於每組測試資料,輸出n的劃分數。

sample input

5
sample output
7
hint5, 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

#include

using

namespace

std;

const

int maxn=60

;int

n,f[maxn][maxn],ans;

intmain()

}while(scanf("

%d",&n)==1

)

return0;

}

就是和為i中分出的集合分別計算最大值是j的情況數,因為我們是從小到大列舉,所以我們已經把前面的序列情況找到;

那怎麼轉移呢?為了不重複,我們要直接在已知的序列中加數,和為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 的劃分數。輸入 標準的輸入包含若干組測試資料。每組測試資料是乙個整數...