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. 设置UITextField的placeholder的颜色

    [textField setValue:[UIColor redColor] forKeyPath:@"_placeholderLabel.textColor"];

  2. 【转载】JavaEE权限管理分析

    JavaEE权限管理分析 一.背景 在 Web 应用开发中,安全一直是非常重要的一个方面.安全虽然属于应用的非功能性需求,但是应该在应用开发的初期就考虑进来.如果在应用开发的后期才考虑安全的问题,就可 ...

  3. comet ajax轮询

    http://www.ibm.com/developerworks/cn/webservices/ws-tip-jaxwsrpc.html http://www.cnblogs.com/pifoo/a ...

  4. [wikioi]传纸条

    http://wikioi.com/problem/1169/ 棋盘型的动态规划,这道题可以看成是从左上角向右下角走两条不重合的路(除了开始和结尾).动态规划要想的是状态和阶段,状态是(x1,y1,x ...

  5. 【HDOJ】2157 How many ways??

    矩阵乘法,用DP做各种wa,后来发现原因了. #include <stdio.h> #include <string.h> typedef struct { ][]; } ma ...

  6. Programming Concepts

    Attributes Attributes provide a powerful method of associating metadata, or declarative information, ...

  7. bzoj1487

    还是仙人掌,和1023一样的考虑方法比1023简单但比1040难环形dp的处理方法和1040一样 type node=record po,next:longint; end; ..,..] of lo ...

  8. JS 利用数组拼接html字符串

    var cc = []; cc.push('<td colspan=' + fields.length + ' style="padding:10px 5px;border:0;&qu ...

  9. 【转】在Ubuntu上下载、编译和安装Android最新源代码

    原文网址:http://blog.csdn.net/luoshengyang/article/details/6559955 看完了前面说的几本书之后,对Linux Kernel和Android有一定 ...

  10. GCC常用参数

    GCC--GNU C Compiler c语言编译器(远不止c语言) 介绍: 作为自由软件的旗舰项目,Richard Stallman 在十多年前刚开始写作 GCC 的时候,还只是把它当作仅仅一个C ...