背包问题 多重背包1(爱思创)

前言:

这篇文章还是是为了帮助一些

像我这样的菜鸟

找到简单的题解

问题描述:

输入格式

输出格式

样例输入

4 5
1 2 3
2 4 1
3 4 3
4 5 2

样例输出

10

问题提示

0<N,V100, 0<vi​,ci​,si​≤100

问题解析:

多重背包是背包问题的最终问题

需要考虑物品的数量,价值和重量

用到动态规划

完整代码:

#include <bits/stdc++.h>
using namespace std;
const int M = 10010, N = 10000;//定义小了会50分
int c[M], w[M];
int dp[M][N];
int main()
{
	int i,j,k,x,y,n,idx=0,v;
    cin>>n>>v;
    for(int i = 1; i <= n; i ++)
    {
        cin>>x>>y>>k;//体积,价值,数量
        for(int j = 1; j <= k; j ++)//读入部分
		{
			idx++;
			c[idx]=x;
			w[idx]=y;
		}
    }
	for(int i=1; i<=idx; i++)
	{
		for(int j=v; j>=1; j--)
		{
			dp[i][j]=dp[i-1][j];//继承上一级
			if(j>=c[i])//判断是否超出范围
			{
                dp[i][j]=max(dp[i-1][j-c[i]]+w[i],dp[i-1][j]);//转换方程
            }
        }
	}
    cout<<dp[idx][v];//输出最终答案
    return 0;
}

 AC


版权声明:本文为HackerQY原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。