问题:死循环。DFS(index+1,sumw,sumc);
最初这里写的是index。
#include<stdio.h>
int V,n,maxvalue=0;
int c[20],w[20];
void DFS(int index,int sumw,int sumc){
if(index==n){
if(sumw<=V&&sumc>maxvalue) maxvalue=sumc;
return;
}
DFS(index+1,sumw+w[index],sumc+c[index]);
DFS(index+1,sumw,sumc);
}
int main(){
scanf("%d%d",&n,&V);
int i;
for(i=0;i<n;i++){
scanf("%d",&c[i]);
}
for(i=0;i<n;i++){
scanf("%d",&w[i]);
}
DFS(0,0,0);
printf("%d\n",maxvalue);
return 0;
}
剪枝
void DFS(int index,int sumw,int sumc){
if(index==n){
return;
}
if(sumw+w[index]<=V){
if(sumc+c[index]>maxvalue) maxvalue=sumc;
DFS(index+1,sumw+w[index],sumc+c[index]);
}
DFS(index+1,sumw,sumc);
}