题目:背包问题
样例:
代码:
#include <iostream>
using namespace std;
int n,W;//n为物品数,w为要取最大值
int w[100],v[100];
int max(int a,int b){
return a>b?a:b;
}
int rec(int i,int j){
//从第i个开始挑选总重小于j的部分
int res;
if(i==n){
res=0;
}else if(j<w[i]){
//无法挑选此物品
res=rec(i+1,j);
}else{
//挑选不选都试一下
res=max(rec(i+1,j),rec(i+1,j-w[i])+v[i]);
}
return res;
}
int main(){
cin>>n>>W;
for(int i=0;i<n;++i){
cin>>w[i]>>v[i];
}
cout<<rec(0,W);
return 0;
}
优化:记忆化搜索