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;
}
#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;
}
相关文章推荐
- http://poj.org/problem?id=3628 背包问题还有一个地方没想明白 直接DFS()
- 背包问题以及DFS算法均可解之1014
- [usaco]4.1.3 Fence Rails 多维背包问题,dfsid
- [DFS]FJSDFZOJ 1420 0/1背包问题
- USACO 6.3.1 Fence Rails 01多背包问题(BS+IDDFS)
- 0-1背包问题(dfs记忆化搜索写法)
- poj 1014 Dividing 背包问题(dfs)(其实我用最笨的方法写的)
- dfs 简单背包问题
- ZOJ 3631超大背包问题(DFS || 折半搜索)
- hdu 3448 Bag Problem dfs求背包问题
- DFS(背包问题)
- 背包问题 顺推解法
- 背包问题的递归与非递归算法
- 贪心算法在背包背包问题中应用的探讨
- 0/1背包问题解法
- 利用穷举法解决组合问题,背包问题,变量相等问题
- 背包问题
- 一个0-1背包问题(hdu 1203)
- 简单背包问题(实际上是子集问题)
- 基于贪心算法的0/1背包问题