有n件物品,每件物品的重量为w[i],价值为c[i],现在需要选出若干件物品放入一个容量为V的背包中,使得在选入背包的物品和
不超过容量V的容量的前提下,让背包中物品的价值之和最大,求最大值?
#include <iostream>
#include<cstdio>
const int maxn =30;
int n,V,maxvalue=0;
int W[maxn],C[maxn];
void DFS(int index,int sumW,int sumC)
{
if(index==n){
if(sumW<=V&&sumC>maxvalue){
maxvalue=sumC;
}
return ;
}
//岔道口
DFS(index+1,sumW,sumC);//不选第index件物品
DFS(index+1,sumW+W[index],sumC+C[index]); //选第index件物品
}
int main() {
scanf("%d%d",&n,&V);
for(int i=0;i<n;i++){
scanf("%d",&W[i]);
}
for(int i=0;i<n;i++)
{
scanf("%d",&C[i]);
}
DFS(0,0,0);//初始时为第0件物品,当前总重量和总价值为0
printf("%d\n",maxvalue);
return 0;
}