前言:
这篇文章还是是为了帮助一些
像我这样的菜鸟
找到简单的题解
问题描述:
有N件物品和一个容量为V的背包。放入第i件物品耗费的空间是Ci,得到的价值是Wi。求解在不超过容量的前提下,将哪些物品装入背包可使价值总和最大。
输入格式
第1行两个正整数,分别表示N和V,中间用一个空格隔开。
第2行N个正整数,表示Ci,中间用一个空格隔开。
第3行N个正整数,表示Wi,中间用一个空格隔开。
其中:1≤N≤100,1≤V≤106,1≤Ci≤10000,1≤Wi≤10000。
输出格式
一行一个正整数,表示最大的价值总和。
样例输入
4 20
8 9 5 2
5 6 7 3
样例输出
16
问题解析:
本题为标准背包问题
需要考虑每个物品的价值和重量
用到动态规划
完整代码:
#include<bits/stdc++.h>
using namespace std;
int c[105],w[105];
int dp[105][1000005];
int n,v,i,j;
int main()
{
cin>>n>>v;
for(i=1; i<=n; i++) cin>>c[i];
for(i=1; i<=n; i++) cin>>w[i];
for(i=1;i<=n;i++)
{
for(j=1;j<=v;j++)
{
dp[i][j]=dp[i-1][j];//继承上一级
if(j>=c[i])
{
dp[i][j]=max(dp[i][j],dp[i-1][j-c[i]]+w[i]);//转换方程
}
}
}
cout<<dp[n][v];//输出结果
return 0;
}
直接AC