DP 平分獎品 HUSTOJ3221

2021-08-18 07:49:55 字數 778 閱讀 3205

程式設計對抗賽疫有n(0程式設計要求:對給定n及n個獎品的價值,求出將這n個獎品分成價值相等級的兩組,共有多少種分法?

例如:n=5,s1,s2,s3......sn分別為1,5,3,8,9。則可分為與,僅有1種分法。

例如:n=7,s1,s2,s3.......sn分別為1,2,3,4,5,6,7。

有4種分法:

與;與;

與;與;

compepe.in

輸入檔案中包含n及s1,s2,s3......sn。(每兩個相鄰的資料之間有乙個空格隔開)。

compepe.out

輸出檔案包含乙個整數,表示多少種分法的答案,資料若無解,則輸出0。

7

1 2 3 4 5 6 7

4

#include using namespace std;

int s[51];

int dp[51][5001];

int main()

if(sum%2) //總獎品不可平分

sum/=2;

dp[0][0]=1;

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

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

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

//前i個剛好放進j中時的分法數 = +

if(dp[n][sum]%2)

cout<} return 0;

}

多重揹包 平分娃娃 dp

多重揹包題目描述 有n種物品,第i種物品的體積是ci,價值是wi,每種物品的數量都是有限的,為 ni。現在又容量為v的揹包,請你放入若干物品,在總體積不超過v的條件下,使得總價值盡可能大。考慮二進位制的思想,將第i種 物品分成若干件物品,可以有 ci,wi ci 2,wi 2 ci 4,wi 4 等...

codeforces 245H 區間DP 好題

方法一 先暴力求出每個字串是否是回文 列舉每個回文串的中間字元 儲存在dp i j 中 再從以求的小區間滾成大區間 view code include include char s 5005 int dp 5005 5005 int main for i 1 i len i 固定i,滾動j for ...