首页 > 代码库 > 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(复习多重背包)

悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(复习多重背包)

悼念512汶川大地震遇难同胞——珍惜现在,感恩生活

传送门

【题目大意】

在资金一定的情况下,给出救难用的每袋大米的重量,价格,袋数。求购买大米的最终重量。

【思路】多重背包。

【复习】多重背包特点。

题目 
N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 

【code】

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int t,mon,k,w[102],pri[102],f[102],cnt[102];
int main()
{
    scanf("%d",&t);
    while(t--)
    {
        memset(f,0,sizeof(f));
        scanf("%d%d",&mon,&k);
        for(int i=1;i<=k;i++)
        scanf("%d%d%d",&pri[i],&w[i],&cnt[i]);
        for(int i=1;i<=k;i++)
        {
            for(int j=mon;j>=pri[i];j--)
            {
                for(int h=0;h<=cnt[i];h++)
                {
                    if(j-h*pri[i]<0)break;
                    f[j]=max(f[j],f[j-h*pri[i]]+h*w[i]);
                }
            }
        }
        printf("%d\n",f[mon]);
    }
    return 0;
}

 

悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(复习多重背包)