程式設計對抗賽疫有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。
71 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 ...