poj 3616 Milking Time DP
题意:在给予的N个时间里,奶牛Bessie在M个时间段里进行产奶,但是每次产奶后都要休息R个时间
M个时间段里,分别有开始时间start和结束时间end,和该时间段里产奶的效率efficiency
求问,应该如何选择哪些时间段进行产奶,才能使得效率最大化
我的错误做法:设D[i]为到时间i以内,所能够产奶的最大量,从而d[i] = max(d[i-1], d[st[k]]+ef[k]);
最终还是TLE了,由于N最大为1000000,且k最大为1000,所以综合还是太花费时间了
正确思路:我看到了网上说最大递增子序列,立刻就明白了...之前的方法确实太复杂了,用最大递增子序列的方法
只用快排对M个时间段以结束时间从小到大排序,接着用到最大递增子序列的思路就进行解答。
由于M最大为1000,显然这个算法复杂度降低了好多。
AC代码:
#include <cstdio> #include <algorithm> using namespace std; const int N = 1000005; const int M = 1005; int m,n,r,d[M]; struct node { int st,ed,ef; }w[M]; int cmp(node n1, node n2) { return n1.ed < n2.ed; } void solve() { int ans = 0; sort(w+1,w+m+1,cmp); d[0] = 0; for(int i = 1; i <= m; i++) { int mx = 0; for(int j = 1; j < i; j++) { if(w[j].ed <= w[i].st) mx = max(mx, d[j]); } d[i] = mx+w[i].ef; ans = max(ans,d[i]); } printf("%d\n", ans); } int main() { while(~scanf("%d %d %d", &n, &m, &r)) { for(int i = 1; i <= m; i++) { scanf("%d %d %d",&w[i].st,&w[i].ed,&w[i].ef); w[i].ed += r; } solve(); } return 0; }
TLE代码:
#include <cstdio> #include <algorithm> using namespace std; const int N = 1000005; const int M = 1005; int n,m,r,len; int st[M],ed[M],ef[M]; int d[N]; void solve() { d[0] = 0; for(int i = 1; i <= n; i++) { int mx = 0; for(int j = 0; j<m; j++) { if(i < ed[j] || i < st[j]) continue; mx = max(mx, d[st[j]]+ef[j]); } d[i] = max(d[i-1], mx); } printf("%d\n", d[n]); } int main() { while(~scanf("%d %d %d", &n, &m, &r)) { len = 0; for(int i = 0; i < m; i++) { scanf("%d %d %d",st+i,ed+i,ef+i); st[i] = max(0, st[i]-r); } solve(); } return 0; }
poj 3616 Milking Time DP的更多相关文章
- POJ 3616 Milking Time DP题解
典型的给出区间任务和效益值,然后求最大效益值的任务取法. 属于一维DP了. 一维table记录的数据含义:到当前任务的截止时间前的最大效益值是多少. 注意. 这表示当前任务一定要选择,可是终于结果是不 ...
- POJ 3616 Milking Time(加掩饰的LIS)
传送门: http://poj.org/problem?id=3616 Milking Time Time Limit: 1000MS Memory Limit: 65536K Total Sub ...
- POJ 3616 Milking Time (排序+dp)
题目链接:http://poj.org/problem?id=3616 有头牛产奶n小时(n<=1000000),但必须在m个时间段内取奶,给定每个时间段的起始时间和结束时间以及取奶质量 且两次 ...
- poj 3616 Milking Time (基础dp)
题目链接 http://poj.org/problem?id=3616 题意:在一个农场里,在长度为N个时间可以挤奶,但只能挤M次,且每挤一次就要休息t分钟: 接下来给m组数据表示挤奶的时间与奶量求最 ...
- poj 3616 Milking Time(dp)
Description Bessie ≤ N ≤ ,,) hours (conveniently labeled ..N-) so that she produces as much milk as ...
- POJ 3616 Milking Time 简单DP
题意:奶牛Bessie在0~N时间段产奶.农夫约翰有M个时间段可以挤奶,时间段f,t内Bessie能挤到的牛奶量e.奶牛产奶后需要休息R小时才能继续下一次产奶,求Bessie最大的挤奶量. 详见代码 ...
- POJ 3616 Milking Time (字符串DP)
题意:找元素关于对角线左或右对称的最大矩阵 思路:左右对角线只需要遍历一条就可以了.只要当前点往上遍历和往后遍历一样就可以. #include<iostream> #include< ...
- POJ 3616 Milking Time 【DP】
题意:奶牛Bessie在0~N时间段产奶.农夫约翰有M个时间段可以挤奶,时间段f,t内Bessie能挤到的牛奶量e.奶牛产奶后需要休息R小时才能继续下一次产奶,求Bessie最大的挤奶量.思路:一定是 ...
- POJ 3616 Milking Time(最大递增子序列变形)
题目链接:http://poj.org/problem?id=3616 题目大意:给你时间N,还有M个区间每个区间a[i]都有开始时间.结束时间.生产效率(时间都不超过N),只能在给出的时间段内生产, ...
随机推荐
- 马士兵Servlet&Jsp学习
Servlet&JSP 1>http常见错误信息: 404--url地址找不找, 403--禁止访问 500--服务器内部错误 2>Servlet的生命周期: *生命全过 ...
- loadrunner java 缺少必要的导入包报错
loadrunner 运行从eclipse中做好的脚本,ctrl + A 复制到loadrunner中来, 添加参数化的的语句:verifyCode = lr.eval_string (&quo ...
- html5 app图片预加载
function Laimgload(){} //图片预加载JS Laimgload.prototype.winHeight = function(){ //计算页面高度 var winHeight ...
- Hive MapJoin
摘要 MapJoin是Hive的一种优化操作,其适用于小表JOIN大表的场景,由于表的JOIN操作是在Map端且在内存进行的,所以其并不需要启动Reduce任务也就不需要经过shuffle阶段,从而能 ...
- mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
权限问题,授权 给 root 全部sql 权限 mysql> grant all privileges on *.* to root@"%" identified by & ...
- Android自定义控件(四)——让每一个Activity UI都具有弹性
前面我们已经介绍了如何让你的ScrollView,ListView具有弹性, 今天,我们在前面的基础上,做一下适当的修改,让那些既不是ScrollView,也不是ListView的Activity页面 ...
- jquery之onblur事件
onblur事件与html结合 function discountCheck(){ //var checkVal=$('input:text[name="Fee1"]').val( ...
- SSH 服务启动时出现如下错误:fatal: Cannot bind any address
注意:本文相关配置及说明已在 CentOS 6.5 64 位操作系统中进行过测试.其它类型及版本操作系统配置可能有所差异,具体情况请参阅相应操作系统官方文档. 问题描述 云服务器 ECS (Elast ...
- 使用堆栈结构进行字符串表达式("7*2-5*3-3+6/3")的计算
问题: 给定字符串String str = "7*2-5*3-3+6/3", 求出字符串里面表达式的结果? 像javascript有自带的eval()方法,可以直接计算.但java ...
- Android测试框架1(非原创)
1.继承AndroidTestCase :public class JunitTest3 extends AndroidTestCase {} 2.在AndroidManifest.xml清单文件中添 ...