题目描述:有n件物品,背包容量为v,在选入背包的物品重量不超过容量v的前提下,让背包中物品的价值之和最大,求最大值。
输入:5 8
3 5 1 2 2
4 5 2 1 3
输出: 10
#include <iostream>
#include <algorithm>
#include <cstring>
#include <map>
#include <cstdio>
#include <cmath>
using namespace std;
int n,v,w[100],c[100],maxvalue=0;
void dfs(int index ,int sumW,int sumC)
{
if(index==n)
{
return ;
}
dfs(index+1,sumW,sumC);//不加入第index个物品
if(sumW+w[index]<=v)
{
if(sumC+c[index]>maxvalue)
{
maxvalue=sumC+c[index];
}
dfs(index+1,sumW+w[index],sumC+c[index]);//加入第index个物品
}
}
int main()
{
cin>>n>>v;//定义物品数量和背包容积
for(int i=0;i<n;i++)
{
cin>>w[i];
}
for(int i=0;i<n;i++)
{
cin>>c[i];
}
dfs(0,0,0);
cout<<maxvalue<<endl;
return 0;
}