#include<iostream>
using namespace std; //组合问题-----------------
#define MaxW 10 //背包容量
int W[]={0,7,3,4,5}; //各物体重量
int V[]={0,42,12,40,25}; //各物体价值
int MaxV=0,actualW=0,actualV=0;
void pack(int i)
{
int j;
for(j=i;j<5;j++){ //j=i不同于排列j=0
if((actualW+W[j]) <= MaxW){
actualW+=W[j];
actualV+=V[j];
cout<<j<<" ";
pack(j+1); //递归可以看成堆,之前为push,之后为pop
actualW-=W[j];
actualV-=V[j];
}
}
cout<<endl;
if(actualV > MaxV)
{
MaxV=actualV;
}
}
void DFS(int index,int sumW,int sumV){ //此为百度的代码,不是很懂
if(index==5){
if(sumW<=MaxW && sumV>MaxV)
MaxV=sumV;
return;
}
DFS(index+1,sumW,sumV);
DFS(index+1,sumW+W[index],sumV+V[index]);
}
void main()
{
DFS(1,0,0);
cout<<MaxV<<endl;
}