poj2392
首先按限制高度排序,然后按多重背包做dp
这里的背包只用知道每种状态是否可行,所以
这里的多重背包可以变成O(nm)
const max=;
var f:array[..,..,..] of longint;
a,b:array[..] of longint;
i,j,k1,k2,n,k,m,w,ans,t:longint;
function findmin(t:longint):longint;
var p,k:longint;
begin
p:=max;
for k:= to do
p:=min(p,f[k1,j-t,k]);
exit(p);
end;
procedure sort(l,r: longint); //按列排序,上下都有牛时1在前2在后,这样处理dp的时候方便多
var i,j,x,y: longint;
begin
i:=l;
j:=r;
x:=a[(l+r) div ];
y:=b[(l+r) div ];
repeat
while (a[i]<x) or (a[i]=x) and (b[i]<y) do inc(i);
while (x<a[j]) or (a[j]=x) and (b[j]>y) do dec(j);
if not(i>j) then
begin
swap(a[i],a[j]);
swap(b[i],b[j]);
inc(i);
j:=j-;
end;
until i>j;
if l<j then sort(l,j);
if i<r then sort(i,r);
end; procedure doit1;
begin
f[k2,j,]:=min(f[k2,j,],f[k1,j,]+*(a[i]-a[i-]));
f[k2,j,]:=min(findmin()+,f[k2,j,]);
end; procedure doit2;
var p:longint;
begin
f[k2,j,]:=min(f[k1,j,]+*(a[i]-a[i-]),f[k2,j,]);
p:=min(min(f[k1,j-,],f[k1,j-,]),f[k1,j-,]);
f[k2,j,]:=min(f[k2,j,],p+a[i]-a[i-]+);
if j->= then
f[k2,j,]:=min(f[k2,j,],findmin()+);
end; procedure doit(x:longint);
var p:longint;
begin
p:=min(f[k1,j,x],f[k1,j,]);
f[k2,j,x]:=min(f[k2,j,x],p+a[i]-a[i-]);
f[k2,j,x]:=min(f[k2,j,x],findmin()+);
end; begin
readln(n,k,m);
for i:= to n do
readln(b[i],a[i]);
sort(,n);
for i:= to k do //初始化
for j:= to do
begin
f[,i,j]:=max;
f[,i,j]:=max;
end;
i:=;
f[,,]:=;
if a[i]=a[i+] then
begin
i:=;
f[,,]:=;
end
else begin
i:=;
if b[]= then f[,,]:=
else f[,,]:=;
end;
k1:=;
k2:=;
while i<=n do
begin
k1:=k1 xor ; //滚动数组
k2:=k2 xor ;
if a[i]=a[i+] then w:= else w:=;
for j:= to k do
begin
for t:= to do
f[k2,j,t]:=max;
doit1; //做4个状态,方程式自己动手比划一下就明白了
doit2;
if w= then
begin
if b[i]= then
doit()
else doit();
end;
end;
i:=i+w;
end;
ans:=max;
for i:= to do
ans:=min(ans,f[k2,k,i]);
writeln(ans);
end.
注意:一般的多重背包复杂度到O(nm)必须使用单调队列,这里是特殊情况
poj2392的更多相关文章
- 多重背包问题:POJ2392
这是一道完全背包问题,只不过增加了限制条件. 在更新最大值的时候,我注释掉了错误的方式,却不明白为什么是错误的,如果有人看到这篇博客,并且知道为什么那样更新是错误的,请指教,谢谢. 上代码: #inc ...
- poj2392 多重背包
//Accepted 868 KB 188 ms //多重背包 #include <cstdio> #include <cstring> #include <iostre ...
- poj2392 Space Elevator(多重背包)
http://poj.org/problem?id=2392 题意: 有一群牛要上太空.他们计划建一个太空梯-----用一些石头垒.他们有K种不同类型的石头,每一种石头的高度为h_i,数量为c_i,并 ...
- POJ2392 SpaceElevator [DP]
题目大意:有一头奶牛要上太空,他有非常多种石头,每种石头的高度是hi,可是不能放到ai之上的高度.而且这样的石头有ci个 将这些石头叠加起来.问可以达到的最高高度. 解题思路:首先对数据进行升序排序. ...
- Space Elevator [POJ2392] [DP][优化]
题目大意 n件物品,第i件hi高,有ci件,最高的一件不能超过ai的高度.问最高能堆多高 输入: 第一行,一个n 接下来每一行,为hi,ai,ci 输出,最高堆多高 样例输入: 37 40 35 23 ...
- POJ2392 Space Elevator
题目:http://poj.org/problem?id=2392 一定要先按高度限制由小到大排序! 不然就相当于指定了一个累加的顺序,在顺序中是不能做到“只放后面的不放前面的”这一点的! 数组是四十 ...
- dp之多重背包poj2392
题意:有k种石头,高为hi,在不超过ai的高度下,这种石头可以放置,有ci种这个石头,求这些石头所能放置的最高高度......... 思路:以往的什么硬币种数,最大硬币数之类的,他们的硬币都已经是排好 ...
- poj2392 Space Elevator(多重背包问题)
Space Elevator Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8569 Accepted: 4052 ...
- poj2392磊石头——排序后背包
题目: 首先按限制高度从小到大排序,不会影响可行解,而不排序可能卡掉正确的情况: 用%2滚动数组时一定注意每次复制上一种情况,因为这个WA了好几次. 代码如下: #include<iostrea ...
随机推荐
- php curl 伪造IP来源的代码分享
php curl 可以模仿用户登录,还可以模仿用户IP地址.伪造IP来源. 1,curl发出请求的文件fake_ip.php: <?php $ch = curl_init(); $url = & ...
- xml学习总结(三)
复杂Schema 扩展包含简单内容的复杂类型 <?xml version="1.0" encoding="UTF-8"?> <xs:schem ...
- .NET平台一些概念
1.什么是CLR CLR(Common Language Runtime)公共语言远行时,是一个可由多种编程语言使用的“远行时”.CLR的核心功能(比如内存管理.程序集加载.安全性.异常处理和线程同步 ...
- Oracle修改表空间大小
在向orale数据库导入数据的时候报 ORA-01658: 无法为表空间 XXX中的段创建 INITIAL 区错误. Oracle我在创建表空间的时候初始化大小为200M,当数据库中数据量达到这个值, ...
- Kinetic使用注意点--ellipse
new Ellipse(config) 参数: config:包含所有配置项的对象. { radius: "半径,可以用数字a.数组[a,b]或对象{x:a,y:b}来表示" } ...
- NSInvocation的使用(转)
转载自:http://www.cnblogs.com/pengyingh/articles/2359199.html http://blog.iosxcode4.com/?p=125 在 iOS中可以 ...
- Lua中cJson的读写
这里采用的是Lua CJson库,是一个高性能的JSON解析器和编码器,其性能比纯Lua库要高10~20倍.并且Lua Json完全支持UTF-8,无需以来其他非Lua/LuaJit相关包. 环境安装 ...
- 【BZOJ 1927】 [Sdoi2010]星际竞速
Description 10 年一度的银河系赛车大赛又要开始了.作为全银河最盛大的活动之一, 夺得这个项目的冠军无疑是很多人的梦想,来自杰森座 α星的悠悠也是其中之一. 赛车大赛的赛场由 N 颗行星和 ...
- 微软职位内部推荐-Senior NLP Scientist & Developer
微软近期Open的职位: Contact Person: Winnie Wei (wiwe@microsoft.com )Senior Software Development Engineer/NL ...
- My97DatePicker{js日历插件}
VS自带了一个日历控件:Calendar,但是它有一个缺陷:即在选择,隐藏,显示的时候都会引起回传 Calendar控件的一些用法: 取值:Calendar1.SelectedDate.ToSh ...