前言:
这篇文章还是是为了帮助一些
像我这样的菜鸟
找到简单的题解
问题描述:

输入格式

输出格式

样例输入
4 5
1 2 3
2 4 1
3 4 3
4 5 2样例输出
10问题提示
0<N,V≤100, 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版权协议,转载请附上原文出处链接和本声明。