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