给定n种物品和一个容量为V的背包。物品i的重量是w[i],其价值为c[i],问应如何选择装入背包的物品,使得装入背包中物品的总价值最大? 求最大总价值
递归实现
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 30;
int n,V,maxValue=0;
int w[maxn],c[maxn];//w重量c价值
/*
void DFS(int index,int sumW,int sumC){
if(index==n){
if(sumC>maxValue)
maxValue=sumC;
return;
}
if(sumW+w[index]<=V){
DFS(index+1,sumW+w[index],sumC+c[index]);
DFS(index+1,sumW,sumC);
}else{
DFS(index+1,sumW,sumC);
}
} */
void DFS(int index,int sumW,int sumC){
if(index==n)
return;
DFS(index+1,sumW,sumC);
if(sumW+w[index]<=V){
if(sumC+c[index]>maxValue)
maxValue = sumC+c[index];
DFS(index+1,sumW+w[index],sumC+c[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;
return 0;
}