把多个情况枚举出来:
在这其中可以使用递归:
AC:
代码:
#include<bits/stdc++.h>
using namespace std;
int value[64],weight[64],volume[64];
bool choose[64];
int wmax,vmax,ans,n=5;
void calculate(){
int i,v=0,w=0,temp=0;
for(i=1;i<=n;i++){
w+=weight[i]*choose[i];
v+=volume[i]*choose[i];
temp+=value[i]*choose[i];}
if(w<=wmax&&v<=vmax&&temp>ans)
ans=temp;
}
void getans(int num){
if(num>n){
calculate();
return;}
int i;
for(i=0;i<=1;i++){
choose[num]=i;
getans(num+1);
choose[num]=0;
}
}
int main(){
int i,j,k;
cin>>vmax>>wmax;
for(i=1;i<=5;i++)
cin>>value[i]>>volume[i]>>weight[i];
getans(1);
cout<<ans;
}
2.对于比赛,只有很少一部分使用枚举,时间耗费比较大。