[BZOJ1642] [Usaco2007 Nov]Milking Time 挤奶时间
2015-09-26 10:34
351 查看
传送门
http://www.lydsy.com/JudgeOnline/problem.php?id=1642题目大意
给定m个挤奶时间段,及产量,每次挤完要休息固定r分钟,n分钟内最大产量题解
dp[i]表示前i个任务最大产量dp[i]=w[i] 赋初值
dp[i]=max(dp[i],dp[j]+w[i]) {第j个任务结束时间+r<=第i个任务开始时间}
为了这个转移,我们要按照开始时间排序
var x:array[0..1000,1..3]of longint; dp:array[0..1000]of longint; i,j,k:longint; n,m,r,ans:longint; procedure sort(l,r:longint); var i,j,k,a,b:longint; begin i:=l; j:=r; a:=x[(l+r) div 2,1]; repeat while x[i,1]<a do inc(i); while a<x[j,1] do dec(j); if not(i>j) then begin for k:=1 to 3 do begin b:=x[i,k]; x[i,k]:=x[j,k]; x[j,k]:=b; end; inc(i); dec(j); end; until i>j; if l<j then sort(l,j); if i<r then sort(i,r); end; function max(a,b:longint):longint; begin if a>b then exit(a) else exit(b); end; begin readln(n,m,r); for i:=1 to m do readln(x[i,1],x[i,2],x[i,3]); sort(1,m); {x[i,1]} ans:=0; for i:=1 to m do begin dp[i]:=x[i,3]; for j:=1 to i-1 do if x[j,2]+r<=x[i,1] then dp[i]:=max(dp[i],dp[j]+x[i,3]); ans:=max(ans,dp[i]); end; writeln(ans); end.
相关文章推荐
- vector容器的基本操作(输入和输出)
- 从数据库读取二进制流视频保存到本地并播放
- 在Tomcat7中部署Solr5.x
- UVa 11300:Spreading the Wealth(杂题)
- LeetCode---Two Sum
- win8无线受限,有效解决方案整理
- LeetCode1 Two Sum
- 《大道至简》第二篇读后感
- [LeetCode#68] Text Justification
- 配置Web站点的虚拟目录
- CAS 自定义数据源
- 再论时间延迟(Timing)
- TOMCAT内存溢出及大小调整
- POJ 3320 Jessica's Reading Problem (尺取法_滑动窗口,阅读最少页数)
- 经典笔试面试题总结(一)
- UltraPullToRefreshWithLoadMore (为UltraPullToRefresh添加上拉加载更多功能)
- HDU - 1074 Doing Homework(状态压缩)
- POJ 1331
- 实时系统的介绍
- 女人和和尚的对话