Codeforces#82_Buns-多重背包
update@2011-08-20
//部分代码如下
struct node{
int times,bi,ci,di;
}choice[12];
//多重背包
//dough 相当于一个背包
//最多会有11种方案,不需要buffing的方案+最多10种需要buffing的方案
//可以计算出每种方案最多可以使用多少次
int dp[12][1001];
for(i = 1;i <= m;i++){
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
choice[i].times = mymin(a/b,n/c);
choice[i].bi = b;choice[i].ci = c;choice[i].di = d;
}
choice[i].times = n/c0;choice[i].bi = 0;choice[i].ci = c0;choice[i].di = d0;
memset(dp[0],0,sizeof(int)*1001);
for(i = 1,m+=1;i <= m;i++){
for(j = 0;j <= n;j++){
int max = -1;
for(k = 0;k <= choice[i].times && (j>=k*choice[i].ci);k++){
max = mymax(dp[i-1][j-k*choice[i].ci] + k*choice[i].di,max);
}
dp[i][j] = max;
}
}//结果保存在dp[m][n]中
题目链接:Buns
简单的多重背包问题. 看下背包九讲,将问题弄明白然后套下多重背包的思想就ok