Milking Time

贝茜是一个勤劳的牛。事实上,她如此​​专注于最大化她的生产力,于是她决定安排下一个N(1≤N≤1,000,000)小时(方便地标记为0..N-1),以便她生产尽可能多的牛奶。

农民约翰有一个M(1≤M≤1,000)可能重叠的间隔列表,他可以在那里进行挤奶。每个区间我有一个起始小时(0≤starting_houri≤N),一个结束小时(starting_houri <ending_houri≤N),以及相应的效率(1≤efficiencyi≤1,000,000),表示他可以从中获取多少加仑的牛奶。贝西在那段时间。 Farmer John分别在开始时间和结束时间开始时开始和停止挤奶。在挤奶时,Bessie必须在整个间隔内挤奶。

尽管贝茜有其局限性。在任何间隔期间挤奶后,她必须休息R(1≤R≤N)小时才能再次开始挤奶。鉴于Farmer Johns的间隔清单,确定Bessie在N小时内可以产生的最大牛奶量。

Input:

* Line 1: Three space-separated integers: NM, and R
* Lines 2..M+1: Line i+1 describes FJ's ith milking interval withthree space-separated integers: starting_houri , ending_houri , and efficiencyi

Output:* Line 1: The maximum number of gallons of milk that Bessie can product in the Nhour

题意:给了一段区间(开始,结束和价值),并给了了一个区间的间隔,求在N的时间内所能获得的最大价值;

题解:线性DP问题,刚开始思路有点问题,想对这总时间(N)直接进行dp,但是很难判定,而且会超时

子问题:在前i个区间内取得最大值,即对这m段的区间进行dp;

划分问题:前i个可以从第j个(小于i)接上,和最长上升子序列是一样的模型;

注意:这个输入数据对它先排个序(必须要排的,按照开始时间或者结束时间从小到大排);

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;const int INF=0x3f3f3f3f;
const int maxn=1e3+5;struct NOOD{int s,e;int val;
} nd[maxn];int f[maxn];/*       //这两种排序方式都能过,当然我更倾向于后者
bool cmp(NOOD x, NOOD y){if(x.s==y.s)return x.e<y.e;return x.s<y.s;
}
*/bool cmp(NOOD x, NOOD y)
{if(x.e==y.e)return x.s<y.s;return x.e<y.e;
}
int main()
{//freopen("in.txt", "r", stdin);int n, m, r;cin>>n>>m>>r;for(int i=1; i<=m; i++)cin>>nd[i].s>>nd[i].e>>nd[i].val;sort(nd+1, nd+m+1, cmp);int ans=-INF;for(int i=1; i<=m; i++){f[i]=nd[i].val;for(int j=1; j<i; j++){if(nd[j].e+r<=nd[i].s)f[i]=max(f[i], f[j]+nd[i].val);}ans=max(ans, f[i]);}cout<<ans<<endl;return 0;
}

转载于:https://www.cnblogs.com/Yokel062/p/10772716.html

POJ 3616 奶牛挤奶相关推荐

  1. 动态规划训练22 [Milking Time POJ - 3616 ]

    Milking Time POJ - 3616 说实话这道题目非常简单,本质上就是 多段有向图的求最大值问题.稍微变化的地方在于这个的的有向边没有那么明显 ,而是需要自己去寻找 如果任务i到任务j之间 ...

  2. 【POJ - 3616】Milking Time (贪心+dp)

    题干: Bessie is such a hard-working cow. In fact, she is so focused on maximizing her productivity tha ...

  3. DP:Miking Time(POJ 3616)

    2015-09-21 奶牛挤奶 题目大意就是这只Bessie的牛产奶很勤奋,某农民有一个时刻表,在N时间内分成M个时间段,每个时间段Bessie会一直产奶,然后有一定的效益,并且Bessie产奶后要休 ...

  4. poj 3616(简单dp)

    题意:你有一头奶牛,你能够在一定的时间里挤奶.而且挤奶量也不同,每次挤奶要休息r时间,问你最大可以挤多少奶. 解题思路:这道题就是单调递增子序列的模型,dp[i]表示前i个任务可以得到的最优值.两层循 ...

  5. POJ 3616 Milking Time

    解题思路: dp[i]:选择第i个区间获得最大值 1.只在第i个区间取奶 dp[i]=node[i].val; 2.如果能在前面已经取奶的后面接着取奶 node[j].ed+R<=node[i] ...

  6. J - Milking Time POJ - 3616(dp动态规划)

    Bessie is such a hard-working cow. In fact, she is so focused on maximizing her productivity that sh ...

  7. POJ 3616 Milking Time (字符串DP)

    题意:找元素关于对角线左或右对称的最大矩阵 思路:左右对角线只需要遍历一条就可以了.只要当前点往上遍历和往后遍历一样就可以. 1 #include<iostream> 2 #include ...

  8. POJ 3616 DP

    题意:给你N的时间,M的工作时间段,每个时间段有一个权重,还有一个R,每次完成一个工作需要休息R,问最后在时间N内,最大权重是多少. 思路:很简单的DP,首先对区间的右坐标进行排序,然后直接转移方程就 ...

  9. 【bzoj1727】[Usaco2006 Open]The Milk Queue 挤奶队列 贪心

    题目描述 Every morning, Farmer John's N (1 <= N <= 25,000) cows all line up for milking. In an eff ...

最新文章

  1. shell学习之路:流程控制(if)
  2. doc es 中type_Elasticsearch(024):es常见的字段映射类型之 连接类型(join type)
  3. python怎么导入opencv_对python opencv 添加文字 cv2.putText 的各参数介绍
  4. 2017面试分享(js面试题记录)
  5. 大学生信息安全_给大学生的信息
  6. 软件版本控制Subversion和Git
  7. 重磅!国内首个三维重建系列视频课程,涉及SFM、立体匹配、多视图几何、结构光等...
  8. 泊松分布在计算机中的应用,泊松分布在管理中应用.ppt
  9. 第十七届时尚COSMO美容大奖盛大启动 亮点多维度升级,2020一起“美就出圈”
  10. Unity3D新手入门教程 (b站阿发) 总结框架笔记
  11. c语言极限,C语言问题合集
  12. python控制51单片机的红绿灯_51单片机实现红绿灯控制的代码+Proteus仿真
  13. [实用代码] 基于CH554电容触摸屏IIC转USB转IIC方案代码分享
  14. 《沈剑架构师训练营》第7章 - 架构解耦
  15. 《算法导论》学习笔记第一章
  16. 【SpringBoot】springboot启动热部署
  17. Vulnhub靶场题解
  18. 微信小程序最新新闻资讯行业动态
  19. 闲鱼客服工具/消息管理系统:可以让客服放下手机,在电脑上管理闲鱼店铺的咨询信息
  20. adsafe净网大师不能拦截广告是什么情况?怎么处理?

热门文章

  1. 【华为】面试真题_2021年
  2. 艾永亮超级产品:企业家该如何培养自己的用户思维
  3. await使用中的阻塞和并发
  4. html中input与button,Html-button和input的区别
  5. flutter_webview Ios端请求网页显示空白
  6. 【前端新手】实现ie浏览器界面兼容所遇的坑
  7. 40句让你坦露心声的经典句子[转载]
  8. google什么时候倒闭(搜索引擎的发展趋势)
  9. 大陆毫米波雷达ARS408-21xx(内附毫米波雷达使用说明书)使用记录:第一期
  10. java 静态变量回收_浅谈静态变量的回收问题