哈理工OJ 2004 整數劃分(經典dp問題)

2021-07-24 13:32:46 字數 1048 閱讀 1815

整數劃分

time limit: 1000 ms memory limit: 32768 k

total submit: 143(109 users) total accepted: 115(104 users) rating: special judge: no

description

將正整數n表示成一系列正整數之和:n=n1+n2+…+nk,其中n1>=n2>=…>=nk>=1。正整數n的這種表示稱為正整數n的劃分。求正整數n的不同劃分個數。例如,正整數6有如下11種不同的劃分:6: 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.

input

多組測試資料,輸入到檔案結束,每組資料報含乙個正整數n(n<=40)

output

輸出n的不同劃分個數。

sample input 3 6

sample output

3 11

hint

source

2014 winter holiday contest 3

【題目分析】用dp[i][j]表示將i拆分成若干個數字,最大的那個數字不超過j的方案數。那麼有兩種情況,第一種是最後乙個數不超過j-1,此時方案數是dp[i][j-1],否則數字剛好是j,此時方案數是dp[i-j][j],所以dp[i][j]=dp[i][j-1]+dp[i-j][j]。

最後的dp[n][n]就是答案。

【ac**】

#include

#include

#include

using

namespace

std;

int dp[1005][1005];

void init(int n,int m)

for(int i=2;i<=n;i++)

else

if(ielse}}

}int main()

return

0;}

哈理工OJ 2004 整數劃分(整數劃分問題)

description 將正整數n表示成一系列正整數之和 n n1 n2 nk,其中n1 n2 nk 1。正整數n的這種表示稱為正整數n的劃分。求正整數n的不同劃分個數。例如,正整數6有如下11種不同的劃分 6 6 5 1 4 2 4 1 1 3 3 3 2 1 3 1 1 1 2 2 2 2 2 ...

第十七周 C語言 oj(2004)

煙台大學計算機學院 2016 完成日期 2016年12月24日 版本號 v1.0 includeint main month,year,day,n int i scanf d n while n int sum 0 易錯點,每次迴圈sum的值必須是0 scanf d d d year,month,d...

杭電OJ 2004 成績轉換

problem description 輸入乙個百分制的成績t,將其轉換成對應的等級,具體轉換規則如下 90 100為a 80 89為b 70 79為c 60 69為d 0 59為e input 輸入資料有多組,每組佔一行,有乙個整數組成。output 對於每組輸入資料,輸出一行。如果輸入資料不在0...