传送门: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背包的更多相关文章

  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. [ Java ] [ Spring ] Spring 一些配置项 及 <context:annotation-config/> 專文解释说明

    節錄重點: @ Resource .@ PostConstruct.@ PreDestro.@PersistenceContext.@Required 都必須聲明相關的 bean 所以如果總是需要按照 ...

  2. deep-in-es6(三)

    模板字符串:反撇号(`)包起来的内容. eg: var str = `assassin`; console.log(str); 模板占位符:${};可达到数据的渲染,在占位符中可以是表达式,运算符,函 ...

  3. colrm---删除文件制定列

  4. 谈谈Spine动画在产品中的应用

    笔者介绍:姜雪伟,IT公司技术合伙人.IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...

  5. 分组的listview——ExpandableListView

    开发使用到的数据统计时可以用分组的ExpandablelistView 效果:

  6. 1.3 Quick Start中 Step 3: Create a topic官网剖析(博主推荐)

    不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Step 3: Create a topic Step 3: 创建一个主题(topi ...

  7. golang sync.Mutex(2)

    package main import ( "fmt" "sync" "time" ) type User struct { Name st ...

  8. js面向对象3-继承

    一.了解继承  首先我们一起了解下js中继承,其实继承就是后辈继承前辈的属性和方法. 二.继承的方法 从父类继承属性和方法 这是对象冒充的方法,模仿java的继承方法.实现的原理是,通过改变父类的执行 ...

  9. VS Code 好用的扩展程序

    1. Atom One Dark Theme.看得比较舒服的主题. 2. Beautify.格式化代码必备. 3. Bracket Pair Colorizer.不同层次的括号颜色不同,光标在括号间时 ...

  10. BZOJ3192: [JLOI2013]删除物品(splay)

    Description   箱子再分配问题需要解决如下问题:  (1)一共有N个物品,堆成M堆.  (2)所有物品都是一样的,但是它们有不同的优先级.  (3)你只能够移动某堆中位于顶端的物品.  ( ...