#include <cstdio>
const int maxn=30;
int n,V,maxValue=0;
int w[maxn],c[maxn]; //w[i]为每件物品的质量,c 为每件物品的价值
void DFS(int index,int sumW,int sumC){//递归可以很好的实现深度优先遍历
if(index==n){//死胡同 已经完成了对于n件物品的选择
if(sumW<=V&&sumC>maxValue){
maxValue=sumC;
}
return;
}
DFS(index+1,sumW,sumC);
DFS(index+1,sumW+w[index],sumC+c[index]);
}
/* 剪枝后
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]>ans){
ans=sumC+c[index];
}
DFS(index+1,sumW+w[index],sumC+c[index]);
}
}
*/
int main(){
scanf("%d%d",&n,&V);
for(int i=0;i<n;i++){
scanf("%d",&w[i]);
}
for(int i=0;i<n;i++){
scanf("%d",&c[i]);
}
DFS(0, 0, 0);
printf("%d\n",maxValue);
return 0;
}
START 深度优先遍历DFS_栈
最新推荐文章于 2025-02-05 22:09:04 发布