START 深度优先遍历DFS_栈

#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;
}

猜你喜欢

转载自blog.csdn.net/Decmxj1229/article/details/88709793