传送门:http://poj.org/problem?id=3628

题目看了老半天,牛来叠罗汉- -|||和书架什么关系啊。。

大意是:一群牛来叠罗汉,求超过书架的最小高度。

0-1背包的问题,对于第i只牛可以放或者不放。然后最后求出大于书架高度的,减去书架高度即可。

也可以倒着来看。背包的容量为牛总的高度-书架的高度,求不超过这个容量的最大值,最后容量-这个值就是答案了。(推荐)

还可以DFS..

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. using namespace std;
  5. const int MAXN=1000000+5;
  6. int H[22],f[MAXN];
  7. int main()
  8. {
  9. int N,B;
  10. while(~scanf("%d%d",&N,&B))
  11. {
  12. memset(f,0,sizeof(f));
  13. int sum=0;
  14. for(int i=1;i<=N;i++)
  15. {
  16. scanf("%d",&H[i]);
  17. sum+=H[i];
  18. }
  19.  
  20. for(int i=1;i<=N;i++)
  21. {
  22. for(int j=sum;j>=H[i];j--)
  23. {
  24. f[j]=max( f[j] , f[j-H[i]]+H[i] );
  25. }
  26. }
  27.  
  28. for(int i=B;i<=sum;i++)
  29. if(f[i]==i)
  30. {
  31. printf("%d\n",f[i]-B);
  32. break;
  33. }
  34.  
  35. }
  36. }
  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. using namespace std;
  5. const int MAXN=1000000+5;
  6. int H[22],f[MAXN];
  7. int main()
  8. {
  9. int N,B;
  10. while(~scanf("%d%d",&N,&B))
  11. {
  12. memset(f,0,sizeof(f));
  13. int sum=0;
  14. for(int i=1;i<=N;i++)
  15. {
  16. scanf("%d",&H[i]);
  17. sum+=H[i];
  18. }
  19.  
  20. int contain=sum-B;
  21.  
  22. for(int i=1;i<=N;i++)
  23. {
  24. for(int j=contain;j>=H[i];j--)
  25. {
  26. f[j]=max( f[j] , f[j-H[i]]+H[i] );
  27. }
  28. }
  29.  
  30. printf("%d\n",contain-f[contain]);
  31.  
  32. }
  33. }

DFS:

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. using namespace std;
  5. const int INF=9999999;
  6. int H[22];
  7. bool visit[22]={0};
  8. int N,B;
  9. int ans;
  10. void dfs(int cur , int sum)
  11. {
  12. if(sum >=ans)
  13. return;
  14.  
  15. if(cur==N)
  16. {
  17. if(sum>=B)
  18. ans=sum;
  19. return;
  20. }
  21.  
  22. dfs(cur+1,sum);
  23. dfs(cur+1,sum+H[cur]);
  24. }
  25. int main()
  26. {
  27.  
  28. while(~scanf("%d%d",&N,&B))
  29. {
  30. ans=INF;
  31. for(int i=0;i<N;i++)
  32. scanf("%d",&H[i]);
  33.  
  34. dfs(0,0);
  35. printf("%d\n",ans-B);
  36.  
  37. }
  38. }

POJ 3628 Bookshelf 2 0-1背包的更多相关文章

  1. POJ 3628 Bookshelf 2(01背包)

    Bookshelf 2 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9488   Accepted: 4311 Descr ...

  2. POJ 3628 Bookshelf 2【01背包】

    题意:给出n头牛的身高,以及一个书架的高度,问怎样选取牛,使得它们的高的和超过书架的高度最小. 将背包容量转化为所有牛的身高之和,就可以用01背包来做=== #include<iostream& ...

  3. poj 3628 Bookshelf 2 基本01背包

    题目大意:FJ有n头奶牛,和一个高为h的架子,给出每头奶牛高度,求使奶牛叠加起来超过架子的最低高度是多少. 题目思路:求出奶牛叠加能达到的所有高度,并用dp[]保存,最后进行遍历,找出与h差最小的dp ...

  4. POJ 3628 Bookshelf 2 (01背包)

    Bookshelf 2 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7496   Accepted: 3451 Descr ...

  5. POJ 3628 Bookshelf 2【背包型DFS/选or不选】

    Bookshelf 2 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11105   Accepted: 4928 Desc ...

  6. poj 3628 Bookshelf 2

    http://poj.org/problem?id=3628 01背包 #include <cstdio> #include <iostream> #include <c ...

  7. POJ 3628 Bookshelf 2 题解

    本题解法非常多,由于给出的数据特殊性故此能够使用DFS和BFS,也能够使用01背包DP思想来解. 由于一般大家都使用DFS,这里使用非常少人使用的BFS.缺点是比DFS更加耗内存,只是长处是速度比DF ...

  8. poj 1837 Balance (0 1 背包)

    Balance Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 10326   Accepted: 6393 题意:给你n个挂 ...

  9. POJ 1636 Prison rearrangement DFS+0/1背包

    题目链接: id=1636">POJ 1636 Prison rearrangement Prison rearrangement Time Limit: 3000MS   Memor ...

随机推荐

  1. Kinect 开发 —— 保持视频影像

    相比直接将影像显示出来,如果能将录制到的影像保存到硬盘上就好了.但是,影像录制,是需要一定的技巧,在网上可以看到很多例子演示如何将Kinect获取到的影像以图片的形式保存到本地,前面的博文也介绍了这一 ...

  2. SQL insert 主键冲突

    待总结 https://blog.csdn.net/JavaCoder_juejue/article/details/82313891 https://blog.csdn.net/a772304419 ...

  3. ajax的内容

    ajax是什么? 通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新,可以局部刷新而不必整个页面整体刷新. url的简单认识: 进入服务器的三种方式: 1.localhost:端口号 ...

  4. [置顶] Docker学习总结(1)——Docker实战之入门以及Dockerfile(一)

    一.Docker是什么? 首先Docker是软件工业上的集装箱技术 回顾,在没有集装箱出现以前,传统运输行业中,会存在这些问题: 在运输过程中,货物损坏 装卸.运输货物,效率低下 运输手续繁多及运输环 ...

  5. 使用Cygwin在Windows上体验Linux的快感

    前言 记得大学的时候就以前使用过Cygwin,可惜当时没有发现她的美,我相信如今大多数朋友可能会更加倾向于使用Git或者干脆直接使用虚拟机以及原生Unix. 只是对于刚进入Linux的世界新人来说,使 ...

  6. LinearLayout-margin不起作用的处理

    1.如果LinearLayout中使用android:layout_marginRight不起作用,通过测试原来在android2.x中,如果一个控件中有android:layout_gravity属 ...

  7. index action分析

    上一篇从结构上分析了action的,本篇将以index action为例仔分析一下action的实现方式. 再概括一下action的作用:对于每种功能(如index)action都会包括两个基本的类* ...

  8. 16.REPL 命令

    转自:http://www.runoob.com/nodejs/nodejs-tutorial.html ctrl + c - 退出当前终端. ctrl + c 按下两次 - 退出 Node REPL ...

  9. BZOJ1503: [NOI2004]郁闷的出纳员(Splay)

    Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的 工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经 ...

  10. Scala中的“=>”和“<-”

    “=>”符号大概可以看做是创建函数实例的语法糖,例如 args.foreach(arg => println(arg)) 大概可以看做 args.foreach(Function(arg) ...