hdu2191

来源:互联网 发布:centos 7.3 lnmp 编辑:程序博客网 时间:2024/03/29 22:11

背包问题

m个物品,每个物品重量为p,价值为h,每种物品有c个。

在重量小于n的情况下使得价值最大。物品不可拆分。


#include <iostream>#include <cstring>using namespace std;int max(int a, int b){    return a > b ? a : b;}int main(){    int i, j, k, T, n, m, p[110], h[110], c[110], f[110];    cin >> T;    while(T--)    {        cin >> n >> m;        memset(f, 0, sizeof(f));        for(i = 0; i < m; i++ ) cin >> p[i] >> h[i] >> c[i];        for(i = 0; i < m; i++ )        {            for(k = 1; k <= c[i]; k++ )            {                for(j = n; j >= p[i]; j-- ) //要逆序                {                   f[j] = max(f[j], f[j - p[i]] + h[i] );                }            }        }        int ans = -1;        for(j = 0; j <= n; j++ ) ans = ans > f[j] ? ans : f[j];        cout << ans << endl;    }    return 0;}


0 0
原创粉丝点击