NYOJ 571 整數劃分 三

2022-08-18 21:30:14 字數 1204 閱讀 4127

/*

第一行:將n劃分成若干正整數之和的劃分數。

狀態轉移方程:dp[i][j]:和為i、最大數不超過j的拆分數

dp[i][j]可以分為兩種情況:1、拆分項至少有乙個j 2、拆分項乙個j也沒有

dp[i][j]=dp[i-j][[j]+dp[i][j-1]

第二行:將n劃分成k個正整數之和的劃分數。

dp[n-k][k]:相當於把k個1從n中拿出來,然後和n-k的拆分項相加的個數

第三行:將n劃分成若干最大不超過k的正整數之和的劃分數。

dp[n][k]

第四行:將n劃分成若干奇正整數之和的劃分數。

dp1[i][j]是當前的劃分數為i,最大值為j時的中的劃分數,則狀態轉移方程為

dp1[i][j]=dp1[i][i]if(j>i&&j%2==1)

=dp1[i][i-1]if(j>i&&j%2==0)(最大數不可能為偶數)

=dp1[i-j][j]+dp1[i][j-2]沒用到j時劃分不變,即dp1[i][j-2],用到則是dp1[i-j][j];

第五行:將n劃分成若干完全不同正整數之和的劃分數。

dp2[i][j]可以分兩種情況:1、dp1[i][j-1]為不選擇j時的方案 2、dp1[i-j][j-1]為選擇j時的方案

0-1揹包:dp2[i][j]=dp2[i][j-1]+dp2[i-j][j-1]

第六行:將n劃分成不超過k個正整數之和的劃分數。

dp[n][k]: ferrers共軛影象

比如 24=5+5+5+4+3+2,6個數,最大數為5

24=6+6+5+4+3 5個數,最大數為6

*/#include

#define n 52

int dp[n][n] = , dp1[n][n] = , dp2[n][n] = ;

void

divid()

}void

divid1()

else

dp1[i][j] = dp1[i-j][j] + dp1[i][j-2

] ; }

}void

divid2()

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

for( int j = 1 ;j < n ; j++)

}int

main()

return0;

}

NYOJ 571 整數劃分 三

描述 整數劃分是乙個經典的問題。請寫乙個程式,完成以下要求。輸入 每組輸入是兩個整數n和k。1 n 50,1 k n 輸出對於輸入的 n,k 第一行 將n劃分成若干正整數之和的劃分數。第二行 將n劃分成k個正整數之和的劃分數。第三行 將n劃分成最大數不超過k的劃分數。第四行 將n劃分成若干個 奇正整...

nyoj 571 整數劃分 三

時間限制 1000 ms 記憶體限制 65535 kb 難度 5描述 整數劃分是乙個經典的問題。請寫乙個程式,完成以下要求。輸入 多組輸入資料。每組輸入是兩個整數n和k。1 n 50,1 k n 輸出對於輸入的 n,k 第一行 將n劃分成若干正整數之和的劃分數。第二行 將n劃分成k個正整數之和的劃分...

nyoj 571 整數劃分 三 (遞迴)

描述 整數劃分是乙個經典的問題。請寫乙個程式,完成以下要求。當n 1時,不論m的值為多少 m 0 只有一種劃分即 當m 1時,不論n的值為多少,只有一種劃分即n個1,當n m時,由於最大值只能是n,所以此時f n,m f n,n 當n m時,根據劃分中是否包含n,可以分為兩種情況 1 劃分中包含n的...