#include<iostream>
#include<cstring>
using namespace std;
int c,n,bestw=0,cw=0,cp=0,r=0;
int p[100],w[100],x[100];
void BackTrack(int i)
{
if(i>n){//完成每一次的探索
if(cp>bestw){bestw=cp;}return;
}
//先进行左侧判断
if(cw+w[i]<=c){
r-=w[i];
x[i]=1;
cw+=w[i];
cp+=p[i];
BackTrack(i+1);
r+=w[i];
cw-=w[i];
cp-=p[i];
}
BackTrack(i+1);
}
int main(void)
{int i;
cin>>n;
cin>>c;
for(i=1;i<=n;i++) cin>>p[i];
for(i=1;i<=n;i++) {cin>>w[i];r+=w[i];}
BackTrack(1);
cout<<bestw<<endl;
}
第一次写的,比较粗糙,时间复杂度上也没有很好的优化。