jzoj P1541 【USACO Open 2012银】书架Bookshelf
2017-03-11 14:13
260 查看
题目描述
当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)
输出
一行,这套书架最小可能的高度值。
样例输入
5 10
5 7
9 2
8 5
13 2
3 8
样例输出
21
数据范围限制
题解:
DP:
因为是按顺序放的,可设sum[i]表示前i本的总宽度,设a[i,j]表示i到j之间最高的书本高度,f[i]表示前i本书这套书架最小可能的高度值。
f[i]=min(f[j]+a[j+1,i],f[i])
如果前j本书这套书架最小可能的高度值加上第j+1本到第i本的最高高度,小于已知的最优解,就替换。
时间复杂度:O(N log N)
当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:
因为是按顺序放的,可设sum[i]表示前i本的总宽度,设a[i,j]表示i到j之间最高的书本高度,f[i]表示前i本书这套书架最小可能的高度值。
f[i]=min(f[j]+a[j+1,i],f[i])
如果前j本书这套书架最小可能的高度值加上第j+1本到第i本的最高高度,小于已知的最优解,就替换。
时间复杂度:O(N log N)
var a:array [0..2001,0..2001] of longint; sum,f,h:array [0..2001] of longint; i,j,n,w,max,l:longint; begin assign(input,'bookshelf.in'); reset(input); assign(output,'bookshelf.out'); rewrite(output); readln(n,l); for i:=1 to n do begin readln(h[i],w); sum[i]:=sum[i-1]+w; end; for i:=1 to n do begin max:=0; for j:=i downto 1 do begin if h[j]>max then max:=h[j]; a[j,i]:=max; end; end; for i:=1 to n do f[i]:=maxlongint div 2; f[0]:=0; for i:=1 to n do for j:=0 to i-1 do if (sum[i]-sum[j]<=l) then if f[j]+a[j+1,i]<f[i] then f[i]:=f[j]+a[j+1,i]; writeln(f ); close(input); close(output); end.
相关文章推荐
- jzoj P1540 【USACO Open 2012铜】岛屿Islands
- 【USACO Open 2012铜】三条直线Three lines (jzoj)
- jzoj P1539 【USACO Open 2012铜】三条直线Three lines
- JZOJ2935. 【USACO Open 2012 Gold Division】Balanced Cow Subsets
- jzoj P1542 【USACO Open 2012银】跑步Running laps
- 【USACO Open 2012银】跑步Running laps (jzoj第四题)(变态)
- 【usaco 2013 open】【JZOJ 3234】 阴阳
- [USACO 2012 Open Gold] Bookshelf【优化dp】
- [USACO 2012 Open]Running Laps奶牛赛跑
- BZOJ2679: [Usaco2012 Open]Balanced Cow Subsets
- 【USACO 2012 Open】Running Laps(树状数组)
- bzoj2679 [Usaco2012 Open]Balanced Cow Subsets折半搜索
- BZOJ2679 : [Usaco2012 Open]Balanced Cow Subsets
- [USACO12OPEN]书架Bookshelf
- BZOJ_2679_[Usaco2012 Open]Balanced Cow Subsets _meet in middle+双指针
- [贪心](JZOJ)【USACO Open 2012铜】岛屿Islands
- [Meet In Middle] BZOJ 2679 [Usaco2012 Open]Balanced Cow Subsets
- BZOJ 2679: [Usaco2012 Open]Balanced Cow Subsets meet_in_the_middle / 折半搜索
- [搜索](JZOJ)【USACO Open 2012铜】三条直线Three Lines
- bzoj 2679: [Usaco2012 Open]Balanced Cow Subsets 折半搜索