POJ3616-Milking Time-(dp)
题意:牛有m个时间段可以挤奶,每个时间段的开始时间,结束时间,挤奶量不尽相同,寄完一次需要休息r时间,求在n时间内如何安排牛挤奶产量最大。
解题:
1.休息r时间,当做结束时间需要+r
2.以结束时间的先后对各个时间段排序,然后dp求最值。dp[i]表示当前到了第i个时间段。
3.状态转移方程:dp[i] = max( dp[i],dp[j]+a[i].v );
4.条件:当前i时间段的挤奶任务的开始时间 >= 以前j时间段的结束时间
简而言之,对m个时间段遍历,每次都求当前时间段 及以前的时间段 一起 挤奶量最大化。当前的dp[i]产量 与 以前时间段的最大挤奶量续上本次时间段的产量。
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<math.h>
#include<string>
#include<map>
#include<queue>
#include<stack>
#include<set>
#define ll long long
#define inf 0x3f3f3f3f
#define p 1000000007
using namespace std; int n,m,r;
struct node
{
int l;
int r;
int v;
};
node a[];
int dp[]; bool cmp( node p1,node p2 )
{
return p1.r<p2.r;
} int main()
{
while( scanf("%d %d %d",&n,&m,&r)!=EOF )
{
memset(dp,,sizeof(dp));
for(int i=;i<=m;i++)
scanf("%d %d %d",&a[i].l,&a[i].r,&a[i].v),a[i].r+=r;
sort(a+,a+m+,cmp);
/*
printf("\n");
for(int i=1;i<=m;i++)
printf("%d %d %d \n",a[i].l,a[i].r,a[i].v);
*/
int maxx=-inf;
for(int i=;i<=m;i++)///当前的时间段
{
dp[i]=a[i].v;///先赋值 第i个时间段自己的产量
//printf("dp[%d]=%d\n",i,dp[i]);观察dp变化
for(int j=i-;j>=;j--)///接前面的时间段
{
if( a[i].l >= a[j].r )
dp[i] = max( dp[i],dp[j]+a[i].v ); }
//printf("dp[%d]=%d\n",i,dp[i]);
maxx=max(maxx,dp[i]);
}
printf("%d\n",maxx);
}
return ;
}
POJ3616-Milking Time-(dp)的更多相关文章
- POJ3616 Milking Time —— DP
题目链接:http://poj.org/problem?id=3616 Milking Time Time Limit: 1000MS Memory Limit: 65536K Total Sub ...
- POJ3616 Milking Time【dp】
Description Bessie is such a hard-working cow. In fact, she is so focused on maximizing her producti ...
- poj-3616 Milking Time (区间dp)
http://poj.org/problem?id=3616 bessie是一头工作很努力的奶牛,她很关心自己的产奶量,所以在她安排接下来的n个小时以尽可能提高自己的产奶量. 现在有m个产奶时间,每个 ...
- POJ3616 Milking Time 简单DP
注意0,1,.....,N是时间点,i~i+1是时间段 然后就是思路:dp[i]代表到时间点 i 获得的最大价值, 1:dp[i]=max(dp[i],dp[s-r]+e),表示有以s为开头,i为结尾 ...
- 动态规划 POJ3616 Milking Time
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; st ...
- poj3616 Milking Time(状态转移方程,类似LIS)
https://vjudge.net/problem/POJ-3616 猛刷简单dp的第一天第二题. 这道题乍一看跟背包很像,不同的在于它是一个区间,背包是定点,试了很久想往背包上套,都没成功. 这题 ...
- POJ 3616 Milking Time DP题解
典型的给出区间任务和效益值,然后求最大效益值的任务取法. 属于一维DP了. 一维table记录的数据含义:到当前任务的截止时间前的最大效益值是多少. 注意. 这表示当前任务一定要选择,可是终于结果是不 ...
- POJ3616【基础DP】
//因为同一点结束的时间段会有多个,这里没考虑: //无限wa: const int N=1e6+7; int b[N]; LL a[N]; LL dp[N]; struct asd{ int s; ...
- poj3616 Milking Time
思路: dp. 实现: #include <iostream> #include <cstdio> #include <algorithm> using names ...
- R - Milking Time DP
Bessie is such a hard-working cow. In fact, she is so focused on maximizing her productivity that sh ...
随机推荐
- 【数据结构与算法】线性表操作(C语言)
#include <stdio.h> #include <stdlib.h> #define OK 1 #define NO 0 #define MAXSIZE 20 type ...
- java解析复杂的json字符串
Java解析Json字符串--复杂对象(方法一) { "name": "三班", "students": [ { "age&q ...
- Docker 下的Zookeeper以及.ne core 的分布式锁
单节点 1.拉取镜像:docker pull zookeeper 2.运行容器 a.我的容器同一放在/root/docker下面,然后创建相应的目录和文件, mkdir zookeeper cd zo ...
- react 中 Modal 多次使用且带参数不同实现
一.举例:对于 echatrs 的柱子分别需要弹窗 带参数 触发弹窗出现事件 showModalhref myChart.on('click', (params) => { switch (pa ...
- 「NOI2015」小园丁与老司机
「NOI2015」小园丁与老司机 要不是这道码农题,去年就补完了NOI2015,其实两问都比较simple,但是写起来很恶心. 先解决第一问,记 \(dp[i]\) 表示老司机到达第 \(i\) 棵树 ...
- spring Boot 学习(七、Spring Boot与开发热部署)
一.热部署在开发中我们修改一个Java文件后想看到效果不得不重启应用,这导致大量时间 花费,我们希望不重启应用的情况下,程序可以自动部署(热部署).有以下四 种情况,如何能实现热部署.•1.模板引擎 ...
- Smobiler客户端会话
//客户端会话存值 Client.Session["userid"] = Class1.userid; //客户端会话取值 userid = Client.Session[&quo ...
- Centos7yum源配置PID锁定问题
在设置centos7的yum源时,执行 yum clean all 出现PID被锁定的问题: 解决的方法就是: rm -rf /var/run/yum.pid 删除这个文件之后就可以恢复正常.
- 换个语言学一下 Golang (13)——Web表单处理
介绍 表单是我们平常编写Web应用常用的工具,通过表单我们可以方便的让客户端和服务器进 行数据的交互.对于以前开发过Web的用户来说表单都非常熟悉.表单是一个包含表单元素的区域.表单元素是允许用户在表 ...
- HTML 注释 和 实体字符
一.注释 在HTML中还有一种特殊的标签——注释标签.如果需要在HTML文档中添加一些便于阅读和理解但又不需要显示在页面中的注释文字,就需要使用注释标签. 注释内容不会显示在浏览器窗口中,但是作为HT ...