nyoj289苹果(广搜解01背包问题)

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=289

运行结果:MemoryLimitExceeded

代码如下:

#include<cstdio>
02. #include<cstring>
03. #include<queue>
04. using namespace std;
05. int n;
06. int m;
07. int best;
08. int v[1010];
09. int w[1010];
10. struct node
11. {
12. int c;      //当前的总价值
13. int w;       //当前的总容量
14. int s;        //标记当前选到了哪个物品
15. }n1,n2;
16. void bfs()
17. {
18. queue<node>q;
19. n1.c=0;
20. n1.w=0;
21. n1.s=0;
22. q.push(n1);
23. while(!q.empty())
24. {
25. n2=q.front();
26. //printf("**%d %d %d**\n",n2.s,n2.w,n2.c);
27. if(n2.c>best)
28. best=n2.c;
29. q.pop();
30. if(n2.s<=n)
31. {
32. n1.s=n2.s+1;
33. if(n2.w+w[n2.s]<=m)
34. {
35. n1.w=n2.w+w[n2.s];
36. n1.c=n2.c+v[n2.s];
37. q.push(n1);
38. }
39. n1.w=n2.w;
40. n1.c=n2.c;
41. q.push(n1);
42. }
43. }
44.  
45. }
46. int main()
47. {
48. while(scanf("%d%d",&n,&m)!=EOF&&(m+n))
49. {
50. for(int i=0;i<n;i++)
51. scanf("%d%d",&w[i],&v[i]);
52. best=0;
53. bfs();
54. printf("%d\n",best);
55. }
56. return 0;
57. }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值