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. android studio中文乱码的解决方法【转】

    一. 在android的源文件中的乱码问题 Android Studio安装后发现所有的中文,不管是界面上的还是输出的log中的中文都变成小框框,具体的解决方法如下, 可以肯定是字体的问题 解决:菜单 ...

  2. 【MS Office2013小技巧】Word中公式中的等号对齐

    步骤: 1. 先将所需要对齐的公式分不同行打出来: 2. 选中所有公式,右键点击并选择“对齐点(A) =”,如图 此时,如果能够正常对齐,则无需进行下面的步骤,但如果出现下图情况并未正常对齐的,再进行 ...

  3. nojs iis asp.net mvc

    http://blogs.msdn.com/b/scott_hanselman/archive/2011/11/29/window-iis-node-js.aspx http://www.hansel ...

  4. Stanford CoreNLP--Part of Speech

    Stanford CoreNLP Part Of Speech简称POS,主要是对待分析的句子中的单词进行标记的功能,如标记名词.动词等,该组件是CoreNLP工程的一部分,详细内容可参考:CoreN ...

  5. IE连EXCHANGE的HTTPS时,出现错误

    "There is a problem with this website's security certificate" 这种问题,一般是SSL或CA认证证书的问题. 一般从服务 ...

  6. [转贴]C++、C#写的WebService相互调用

    以下宏文(原文在 http://blog.sina.com.cn/s/blog_4e7d38260100ade4.html),是转贴并进行了修饰编辑: 首先感谢永和兄提供C++的WebService服 ...

  7. 使用SparseArray代替HashMap

    HashMap是java里比较常用的一个集合类,我比较习惯用来缓存一些处理后的结果.最近在做一个Android项目,在代码中定义这样一个变量,实例化时,Eclipse却给出了一个 performanc ...

  8. Android 窗口管理

    一.概述 在Android系统中,从设计的角度来看,窗口管理系统是基于C/S模式的.整个窗口系统分为服务端和客户端两大部分,客户端负责请求创建窗口和使用窗口,服务端完成窗口的维护,窗口显示等. 在Cl ...

  9. POJ2676 Sudoku(dfs)

    题目链接. 题目大意: 就是数独游戏.横竖,每一个9宫方块,必须有1~9,且不重复. 分析: 直接DFS.一开始在原图上搜,会TLE.把要补全的空格,放入数组,这样就不用遍历整个图寻找要填的空格了. ...

  10. 水leetcode 爬楼梯

    public class Solution { public int climbStairs(int n) { if(n==1) return 1; if(n==2) return 2; int pr ...