【动态规划】多重背包

问题 Q: 【动态规划】多重背包

时间限制: 1 Sec  内存限制: 64 MB
提交: 112  解决: 49
[提交] [状态] [讨论版] [命题人:admin]

 

题目描述

张琪曼:“魔法石矿里每种魔法石的数量看起来是足够多,但其实每种魔法石的数量是有限的。”

李旭琳:“所以我们需要改变装包策略啦。”

现有N(N≤10)种魔法石和一个容量为V(0

 

输入

第一行为两个数字,即V和N。以下N行为每种物品的空间,价值和数量。

 

输出

最大价值总和。

 

样例输入

8 2
2 100 4
4 100 2

 

样例输出

400

 

AC代码


#include 

#include 

#include 

#include 

using namespace std;

int w[100100],c[100100],m[100100];

int f[100100];

int n,v;

int multiple()

{

    for(int i=1;i<=n;i++)

    {

        if(m[i]*c[i]>=v)

            for(int j=c[i];j<=v;j++)

                f[j]=max(f[j],f[j-c[i]]+w[i]);

        for(int k=1;k=k*c[i];j--)

                f[j]=max(f[j],f[j-k*c[i]]+w[i]*k);

        for(int j=v;j>=c[i]*m[i];j--)

            f[j]=max(f[j],f[j-m[i]*c[i]]+w[i]*m[i]);

    }

    return f[v];

}

int main()

{

    cin>>v>>n;

    for(int i=1;i<=n;i++)

        cin>>c[i]>>w[i]>>m[i];

    cout<

 

你可能感兴趣的:(背包问题,动态规划,步于C++)