POJ 3628 Bookshelf 2 0-1背包
传送门:http://poj.org/problem?id=3628
题目看了老半天,牛来叠罗汉- -|||和书架什么关系啊。。
大意是:一群牛来叠罗汉,求超过书架的最小高度。
0-1背包的问题,对于第i只牛可以放或者不放。然后最后求出大于书架高度的,减去书架高度即可。
也可以倒着来看。背包的容量为牛总的高度-书架的高度,求不超过这个容量的最大值,最后容量-这个值就是答案了。(推荐)
还可以DFS..
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- const int MAXN=1000000+5;
- int H[22],f[MAXN];
- int main()
- {
- int N,B;
- while(~scanf("%d%d",&N,&B))
- {
- memset(f,0,sizeof(f));
- int sum=0;
- for(int i=1;i<=N;i++)
- {
- scanf("%d",&H[i]);
- sum+=H[i];
- }
- for(int i=1;i<=N;i++)
- {
- for(int j=sum;j>=H[i];j--)
- {
- f[j]=max( f[j] , f[j-H[i]]+H[i] );
- }
- }
- for(int i=B;i<=sum;i++)
- if(f[i]==i)
- {
- printf("%d\n",f[i]-B);
- break;
- }
- }
- }
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- const int MAXN=1000000+5;
- int H[22],f[MAXN];
- int main()
- {
- int N,B;
- while(~scanf("%d%d",&N,&B))
- {
- memset(f,0,sizeof(f));
- int sum=0;
- for(int i=1;i<=N;i++)
- {
- scanf("%d",&H[i]);
- sum+=H[i];
- }
- int contain=sum-B;
- for(int i=1;i<=N;i++)
- {
- for(int j=contain;j>=H[i];j--)
- {
- f[j]=max( f[j] , f[j-H[i]]+H[i] );
- }
- }
- printf("%d\n",contain-f[contain]);
- }
- }
DFS:
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- const int INF=9999999;
- int H[22];
- bool visit[22]={0};
- int N,B;
- int ans;
- void dfs(int cur , int sum)
- {
- if(sum >=ans)
- return;
- if(cur==N)
- {
- if(sum>=B)
- ans=sum;
- return;
- }
- dfs(cur+1,sum);
- dfs(cur+1,sum+H[cur]);
- }
- int main()
- {
- while(~scanf("%d%d",&N,&B))
- {
- ans=INF;
- for(int i=0;i<N;i++)
- scanf("%d",&H[i]);
- dfs(0,0);
- printf("%d\n",ans-B);
- }
- }
POJ 3628 Bookshelf 2 0-1背包的更多相关文章
- POJ 3628 Bookshelf 2(01背包)
Bookshelf 2 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9488 Accepted: 4311 Descr ...
- POJ 3628 Bookshelf 2【01背包】
题意:给出n头牛的身高,以及一个书架的高度,问怎样选取牛,使得它们的高的和超过书架的高度最小. 将背包容量转化为所有牛的身高之和,就可以用01背包来做=== #include<iostream& ...
- poj 3628 Bookshelf 2 基本01背包
题目大意:FJ有n头奶牛,和一个高为h的架子,给出每头奶牛高度,求使奶牛叠加起来超过架子的最低高度是多少. 题目思路:求出奶牛叠加能达到的所有高度,并用dp[]保存,最后进行遍历,找出与h差最小的dp ...
- POJ 3628 Bookshelf 2 (01背包)
Bookshelf 2 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7496 Accepted: 3451 Descr ...
- POJ 3628 Bookshelf 2【背包型DFS/选or不选】
Bookshelf 2 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11105 Accepted: 4928 Desc ...
- poj 3628 Bookshelf 2
http://poj.org/problem?id=3628 01背包 #include <cstdio> #include <iostream> #include <c ...
- POJ 3628 Bookshelf 2 题解
本题解法非常多,由于给出的数据特殊性故此能够使用DFS和BFS,也能够使用01背包DP思想来解. 由于一般大家都使用DFS,这里使用非常少人使用的BFS.缺点是比DFS更加耗内存,只是长处是速度比DF ...
- poj 1837 Balance (0 1 背包)
Balance Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 10326 Accepted: 6393 题意:给你n个挂 ...
- POJ 1636 Prison rearrangement DFS+0/1背包
题目链接: id=1636">POJ 1636 Prison rearrangement Prison rearrangement Time Limit: 3000MS Memor ...
随机推荐
- Kinect 开发 —— 保持视频影像
相比直接将影像显示出来,如果能将录制到的影像保存到硬盘上就好了.但是,影像录制,是需要一定的技巧,在网上可以看到很多例子演示如何将Kinect获取到的影像以图片的形式保存到本地,前面的博文也介绍了这一 ...
- SQL insert 主键冲突
待总结 https://blog.csdn.net/JavaCoder_juejue/article/details/82313891 https://blog.csdn.net/a772304419 ...
- ajax的内容
ajax是什么? 通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新,可以局部刷新而不必整个页面整体刷新. url的简单认识: 进入服务器的三种方式: 1.localhost:端口号 ...
- [置顶]
Docker学习总结(1)——Docker实战之入门以及Dockerfile(一)
一.Docker是什么? 首先Docker是软件工业上的集装箱技术 回顾,在没有集装箱出现以前,传统运输行业中,会存在这些问题: 在运输过程中,货物损坏 装卸.运输货物,效率低下 运输手续繁多及运输环 ...
- 使用Cygwin在Windows上体验Linux的快感
前言 记得大学的时候就以前使用过Cygwin,可惜当时没有发现她的美,我相信如今大多数朋友可能会更加倾向于使用Git或者干脆直接使用虚拟机以及原生Unix. 只是对于刚进入Linux的世界新人来说,使 ...
- LinearLayout-margin不起作用的处理
1.如果LinearLayout中使用android:layout_marginRight不起作用,通过测试原来在android2.x中,如果一个控件中有android:layout_gravity属 ...
- index action分析
上一篇从结构上分析了action的,本篇将以index action为例仔分析一下action的实现方式. 再概括一下action的作用:对于每种功能(如index)action都会包括两个基本的类* ...
- 16.REPL 命令
转自:http://www.runoob.com/nodejs/nodejs-tutorial.html ctrl + c - 退出当前终端. ctrl + c 按下两次 - 退出 Node REPL ...
- BZOJ1503: [NOI2004]郁闷的出纳员(Splay)
Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的 工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经 ...
- Scala中的“=>”和“<-”
“=>”符号大概可以看做是创建函数实例的语法糖,例如 args.foreach(arg => println(arg)) 大概可以看做 args.foreach(Function(arg) ...