Description


Problem D

The Book-shelver’s Problem


Input: standard input

Output: standard output

Time Limit: 5 seconds

Memory Limit: 32 MB

You are given a collection of books, which must be shelved in a library bookcase ordered (from top to bottom in the bookcase and from left to right in each shelf) by the books’ catalogue numbers. The bookcase has a fixed width, but you may have any height
you like. The books are placed on shelves in the bookcase in the usual upright manner (i.e., you cannot lay a book on its side). You may use as many shelves as you like, placed wherever you like up to the height of the bookcase, and you may put as many books
on each shelf as you like up to the width of the bookcase. You may assume that the shelves have negligible thickness.

Now, given an ordered (by catalogue numbers) list of the heights and widths of the books and the width of the bookcase, you are expected to determine what is the minimum height bookcase that can shelve all those books.

Input

The input file may contain multiple test cases. The first line of each test case contains an integer
N (1 £ N £ 1000) that denotes the number of books to shelve, and a floating-point number
W (0 < W £ 1000) that denotes the width of the bookcase in centimeters. Then follow
N lines where the i-th (1 £ i £ N) line contains two floating-point numbers
hi (0 < hi £ 100) and wi (0 < wi £ W) indicating the height and width (both in centimeters) of the
i-th book in the list ordered by catalogue numbers. Each floating-point number will have four digits after the decimal point.

A test case containing two zeros for N and W terminates the input.

Output

For each test case in the input print a line containing the minimum height (in centimeters, up to four digits after the decimal point) of the bookcase that can shelve all the books in the list.

 

Sample Input

5 30.0000

30.0000 20.0000

20.0000 10.0000

25.0000 10.0000

30.0000 15.0000

10.0000 5.0000

10 20.0000

10.0000 2.0000

15.0000 10.0000

20.0000 5.0000

6.0000 2.0000

10.0000 3.0000

30.0000 6.0000

5.0000 3.0000

35.0000 2.0000

32.0000 4.0000

10.0000 6.0000

0 0.0000

 

Sample Output

60.0000

65.0000

题意:n本书,有宽和高,要你依次放到书架上,能够用木板隔层,每层最多不超过m的宽度

思路:居然要求是依次放,那么每本书有放这层和不放这层的两种可能,记忆化搜索,注意要考虑全都放一层的情况

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstdlib>
using namespace std;
const int maxn = 1005;
const double inf = 0x3f3f3f3f3f3f3f3f;
double m, h[maxn], w[maxn], dp[maxn];
int n, vis[maxn]; double dfs(int cur) {
if (cur >= n+1)
return 0;
if (vis[cur])
return dp[cur];
double &ans = dp[cur];
ans = inf;
vis[cur] = 1;
double H = h[cur], W = w[cur];
for (int u = cur+1; u <= n+1; u++) {
ans = min(ans, dfs(u)+H);
W += w[u];
H = max(H, h[u]);
if (W-m > 1e-9)
break;
}
return ans;
} int main() {
while (scanf("%d%lf", &n, &m) != EOF && n) {
memset(vis, 0, sizeof(vis));
for (int i = 1; i <= n; i++)
scanf("%lf%lf", &h[i], &w[i]);
double ans = dfs(1);
printf("%.4lf\n", ans);
}
return 0;
}

UVA - 10239 The Book-shelver&#39;s Problem的更多相关文章

  1. UVA 10026 Shoemaker&#39;s Problem

    Shoemaker's Problem Shoemaker has N jobs (orders from customers) which he must make. Shoemaker can w ...

  2. UVA - 10057 A mid-summer night&#39;s dream.

    偶数时,中位数之间的数都是能够的(包含中位数) 奇数时,一定是中位数 推导请找初中老师 #include<iostream> #include<cstdio> #include ...

  3. UVA 12436 - Rip Van Winkle&#39;s Code(线段树)

    UVA 12436 - Rip Van Winkle's Code option=com_onlinejudge&Itemid=8&page=show_problem&cate ...

  4. UVa 1363 (数论 数列求和) Joseph's Problem

    题意: 给出n, k,求 分析: 假设,则k mod (i+1) = k - (i+1)*p = k - i*p - p = k mod i - p 则对于某个区间,i∈[l, r],k/i的整数部分 ...

  5. UVa 10025: The ? 1 ? 2 ? ... ? n = k problem

    这道题仔细思考后就可以得到比较快捷的解法,只要求出满足n*(n+1)/2 >= |k| ,且n*(n+1)/2-k为偶数的n就可以了.注意n==0时需要特殊判断. 我的解题代码如下: #incl ...

  6. codeforces 459D - Pashmak and Parmida&#39;s problem【离散化+处理+逆序对】

    题目:codeforces 459D - Pashmak and Parmida's problem 题意:给出n个数ai.然后定义f(l, r, x) 为ak = x,且l<=k<=r, ...

  7. 湘潭大学1185 Bob&#39;s Problem

    Bob's Problem Accepted : 114   Submit : 589 Time Limit : 1000 MS   Memory Limit : 65536 KB 题目描写叙述 Bo ...

  8. Uva 12436 Rip Van Winkle&#39;s Code

    Rip Van Winkle was fed up with everything except programming. One day he found a problem whichrequir ...

  9. Codeforces Round #261 (Div. 2)459D. Pashmak and Parmida&#39;s problem(求逆序数对)

    题目链接:http://codeforces.com/contest/459/problem/D D. Pashmak and Parmida's problem time limit per tes ...

随机推荐

  1. C51 的编程规范

    编程首要是要考虑程序的可行性,然后是可读性.可移植性.健壮性以及可测试性.这是总则.但是很多人忽略了可读性.可移植性和健壮性(可调试的方法可能歌不相同),这是不对的. 1.当项目比较大时,最好分模块编 ...

  2. 好看的UI设计网站 www.ui.cn 和 插画网站 www.pixiv.net 千图网,界面很不错~

    http://www.ui.cn/?t=share#project http://www.pixiv.net/ http://www.flaticon.com/ www.58pic.com 那张 给人 ...

  3. Programming in lua 环境

    Lua 用一个名为environment 普通的表来保存所有的全局变量.(更精确的说,Lua在一系列的environment 中保存他的“global”变量,但是我们有时候可以忽略这种多样性)这种结果 ...

  4. while +next 循环 回到循环顶端

    my $show_tip = 1; sub login { while (1) { my $api ="https://login.weixin.qq.com/cgi-bin/mmwebwx ...

  5. 转载:浅谈Java多线程的同步问题【很好我就留下来,多分共享】

    转载:http://www.cnblogs.com/phinecos/archive/2010/03/13/1684877.html#undefined 多线程的同步依靠的是对象锁机制,synchro ...

  6. C++ Prime:const的引用

    可以把引用绑定到const对象上,就像绑定到其他对象上一样,我们称之为对常量的引用.与普通引用不同的是,对常量的引用不能被用作修改它所绑定的对象: ; const int &r1 = ci; ...

  7. [LeetCode#161] One Edit Distance

    Problem: Given two strings S and T, determine if they are both one edit distance apart. General Anal ...

  8. 一起啃PRML - 1.2.1 Probability densities 概率密度

    一起啃PRML - 1.2.1 Probability densities @copyright 转载请注明出处 http://www.cnblogs.com/chxer/ 我们之前一直在讨论“谁取到 ...

  9. nginx + memcached-session-manager 实现tomcat下的负载均衡

    1. tomcat6.0 配置 memcached-session-manager 实现session共享 1.1 下载memcached-session-manager-1.6.5.jar.memc ...

  10. Linux libtins 库安装教程

    因为工作原因需要用到libtins网络库, 所以今天去装一下. 很尴尬,由于本人对linux理解比较浅, 所以在中途遇到了一些问题. 虽然只是简单的安装步骤,但是阻挡不了自己菜啊. 一.  下载lib ...