您的位置:首页 > 其它

DFS 做背包问题

2017-04-30 21:01 190 查看


#include <stdio.h>

int n,v,ans;//分别为物品件数,背包容量,最大价值。

int w[100],c[100];//

void DFS(int index,int sumW,int sumC)//sumW,sumC,分别为当前总价值,和当前总重量。if

{

 if(index==n)

  return ;

 DFS(index+1,sumW,sumC);//不选第index件物品

  if(sumW+w[index]<=v)//如果假日第index件物品后未超过容量v,才能继续。

  {

   if(sumC+c[index]>ans)

   ans=sumC+c[index];//这时候我们更新最大值。 

   DFS(index+1,sumW+w[index],sumC+c[index]);//这时候我们选第index件物品。

  }

}

int main()

{

 int i;

 scanf("%d %d",&n,&v);

 for(i=0;i<n;i++)

 scanf("%d",&w[i]);

 for(i=0;i<n;i++)

 scanf("%d",&c[i]);

 DFS(0,0,0);

 printf("%d\n",ans);

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: