hdu2191 多重背包

Posted a_clown_cz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu2191 多重背包相关的知识,希望对你有一定的参考价值。

题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2191

多重背包:有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i]。

              求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。

有两种思路,其中一种是转换为01背包,还有一种就是转换为01背包和完全背包。

转换为01背包代码:

//转换为01背包的代码
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;

const int N=105;
const int MAXW=4005;
int v[N],w[N],num[N];
int dp[MAXW];

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n,m;
        cin>>n>>m;
        for(int i=0; i<m; i++)
            cin>>w[i]>>v[i]>>num[i];
        memset(dp,0,sizeof(dp));
        for(int i=0; i<m; i++)
            for(int j=1; j<=num[i]; j++)
                for(int k=n; k>=w[i]; k--)
                    dp[k]=max(dp[k],dp[k-w[i]] +v[i]);
        cout<<dp[n]<<endl;
    }
    return 0;
}

 

以上是关于hdu2191 多重背包的主要内容,如果未能解决你的问题,请参考以下文章

HDU_2191_多重背包

HDU 2191多重背包问题

[HDU2191]多重背包

HDU #2191 买米问题 多重背包及其优化

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

hdu-2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活---多重背包