JZOJ 3.10 1541——书架

2024-01-30 11:48
文章标签 jzoj 书架 3.10 1541

本文主要是介绍JZOJ 3.10 1541——书架,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

当FJ不在为奶牛挤奶、打包包裹、将他的奶牛排成一队、或是砌栅栏的时候,他喜欢坐着看一本好书。多年来他收集了N(1 <= N <= 2,000)本书,他想建立一套新的书架来保存他的书。

每本书宽W(i),高度为H(i)。书需要被按照顺序地放进书架,比如:第一个书架放了k本书,那应该是第1本到第k本,第二个书架放的书应该以第k+1本开始。每个书架可以存放宽度和至多为L(1 <= L <=1,000,000,000)的书,这个书架的高度应该是他所放的书中最高的一本书的高度。整套书架的高度为每个书架高度之和。每本书应该垂直的放在书架里。

请帮助FJ计算这套书架最小可能的高度值。

输入

第1行:两个用空格隔开的整数:N, L

第2行至第n + 1行:第i +1行有两个用空格隔开的整数:H(i), W(i)

   (1 <= H(i) <= 1,000,000; 1 <= W(i) <= L)

输出

一行,这套书架最小可能的高度值。

样例输入

5 10

5 7

9 2

8 5

13 2

3 8

样例输出

21


纯dp,~~暴力不会搜,DP出奇迹~~
设sum[i]为从1到i的宽度
m[i,j]为从i到j的最高的书的值
f[i]为到第i本书的最小可能高度
动态转移方程为f[i]:=min(f[j]+m[j+1,i],f[i])
1<=i<=n;
0<=j<=i

代码如下:

var n,l,i,j:longint;sum,h,w,f:array[0..2000]of longint;m:array[0..2000,0..2000]of longint;function min(a,b:longint):longint;
beginif a<b then exit(a) else exit(b);
end;function max(a,b:longint):longint;
beginif a>b then exit(a) else exit(b);
end;beginassign(input,'bookshelf.in');assign(output,'bookshelf.out');reset(input);rewrite(output);readln(n,l);for i:=1 to n dobeginreadln(h[i],w[i]);sum[i]:=sum[i-1]+w[i];end;for i:=1 to n dobeginm[i,i]:=h[i];for j:=i+1 to n do m[i,j]:=max(m[i,j-1],h[j]);end;for i:=1 to n do f[i]:=maxlongint div 5;f[0]:=0;for i:=1 to n dobeginfor j:=0 to i-1 doif sum[i]-sum[j]<=l then f[i]:=min(f[j]+m[j+1,i],f[i]);end;write(f[n]);close(input);close(output); 
end.

这篇关于JZOJ 3.10 1541——书架的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/660147

相关文章

3.10.输入型参数与输出型参数

指针才是C的精髓 3.10.输入型参数与输出型参数3.10.1、函数为什么需要形参与返回值3.10.2、函数传参中使用const指针3.10.3、函数需要向外部返回多个值时怎么办?3.10.4、总结 3.10.输入型参数与输出型参数 3.10.1、函数为什么需要形参与返回值 (1)函数名是一个符号,表示整个函数代码段的首地址,实质是一个指针常量,所以在程序中使用到函数名时都是

Jzoj 条件循环(while,do while) 部分代码(共25题)

1020: 【入门】编程求1+3+5+...+n #include <bits/stdc++.h>using namespace std;int n, sum;int main() {scanf("%d", &n);for(int i=1; i<=n; i+=2){sum+=i;} printf("%d", sum);return 0;} 1012: 【入门】两数比大小 #i

Jzoj 二维数组部分代码(共13题)

2788: 【入门】二维数组的输入输出 边输入边输出 #include <bits/stdc++.h>using namespace std;int n, m, a[11][11];int main(){scanf("%d %d", &n, &m);//边输入边输出for(int i=1; i<=n; ++i){for(int j=1; j<=m; ++j){scanf("%d", &

3.10 Browser -- useTitle

3.10 Browser – useTitle https://vueuse.org/core/useTitle/ 作用 响应式的修改document的标题 官方示例 import { useTitle } from '@vueuse/core'const title = useTitle()console.log(title.value) // print current title

基于HTML5 Canvas的CSG构造实体几何书架

CSG 构造实体几何这个概念在工业水利水电施工上、游戏上已经有很多人使用了,最简单的实体表示叫作体元,通常是形状简单的物体,如立方体、圆柱体、棱柱、棱锥、球体、圆锥等。根据每个软件包的不同这些体元也有所不同,在一些软件包中可以使用弯曲的物体进行 CSG 处理,在另外一些软件包中则不支持这些功能。构造物体就是将体元根据集合论的布尔逻辑组合在一起,这些运算包括:并集、交集以及补集。我们一般可以用 C

企业网络解决方案资料书架

企业网络解决方案资料书架 https://info.support.huawei.com/info-finder/vue/#/zh/enterprise/bookshelf/horizontalsolution/cloudcampushttps://support.huawei.com/enterprise/zh/doc/EDOC1100368563/d25f7f44

Linux kernel-3.10 I2C 驱动程式之Slave

Linux kernel-3.10 I2C slave设备最简驱动程式 重要数据结构:        struct i2c_driver, struct i2c_client 重要i2c子系统API:  i2c_register_board_infor(&adap),  i2c_add_driver() static struct i2c_driver tpd_i2c_

Linux kernel-3.10 I2C 驱动程式之Master

Linux kernel-3.10 I2C Master最简驱动程式 重要数据结构:         struct i2c_algorithmv, struct platform_driver, struct i2c_adapter 重要i2c子系统API:  i2c_add_numbered_adapter(&adap);  int lxx_i2c_transfer(struct i2

csu 1541: There is No Alternative(最小生成树 Kruskal)

题目链接:点击打开链接 题意就是 求出图中最小生成树的必要边的个数以及这些边权值的和 首先用Kruskal求出最小生成树的值 保存最小生成树中的边 然后枚举每条边  如果这条边是在刚才最小生成树中的边 则把它删除再求最小生成树的值 与之前的进行比较 如果值大了  则这条边是必须的  保存这条边的值 #include<cstdio>#include<cstdlib>#incl

3.10、活跃性、死锁、哲学家就餐、活锁、饥饿

死锁 有这样的情况:一个线程需要同时获得多把锁,这时就容易发生死锁 t1线程获得A对象锁,接下来想获取B对象的锁,t2线程获得B对象锁,接下来想要获取A对象锁 例: Object A = new Object();Object B = new Object();new Thread(() -> {synchronized (A) {log.debug("lock A");try {Thr