[USACO2007NOVS] Milking Time S
题目描述
Bessie 可以在接下来 \(N\) 个小时内产奶,为了方便,我们把这 \(N\) 个小时 \(0\dots N-1\) 编号。
FJ 在这 \(N\) 个小时内有 \(M\) 段时间可以来给 Bessie 挤奶,第 \(i\) 段时间从 \(Start_i\) 开始到 \(End_i\) 结束,可以得到 \(Eff_i\) 加仑牛奶。
每次 FJ 给 Bessie 挤奶之后,Bessie 都要休息 \(R\) 个小时,FJ 才能开始下一次挤奶。
现在,FJ 需要您计算出 Bessie 在这 \(N\) 个小时内最多产多少奶。
输入格式
第一行有三个整数,分别表示 \(N,M,R\)。
第 \(2\dots M+1\) 行,第 \(i+1\) 行有三个整数 \(Start_i,End_i,Eff_i\),描述一段挤奶的时间。
输出格式
输出一行一个整数表示答案。
样例 #1
样例输入 #1
12 4 2
1 2 8
10 12 19
3 6 24
7 10 31
样例输出 #1
43
提示
数据规模与约定
对于全部的测试点,保证 \(1\le N\le 10^6\),\(1\le M\le 10^3\),\(1\le Start_i<end_i\le N\),\(1\le Eff_i\le 10^6\)。
先考虑最基础的暴力。每次考虑一个区间选不选,如果选,那么下一个区间的开头要和这一个区间隔至少r,否则不变。
复杂度\(O(2^n)\)。我们可以将所有的区间按照右端点排序,然后每次记录上一个区间末尾,选的时候判断差距是否大于r即可。
暴力中记录两个量,一个是上一个区间末尾,一个是现在到了第几个区间。
考虑怎样记忆化。容易发现我们可以将所有左端点和右端点+r离散化,然后就把左右端点范围缩在了m的级别。然后搜索时记录两个量,一个是到了第几个区间,一个是上一个区间右端点+r离散化的位置。如果这个位置l离散化大于等于上一个区间右端点+r的位置,那就可以选这个区间。
#include<bits/stdc++.h>
using namespace std;
const int M=1e3+5;
int n,m,r,ans,dp[M][M*3],lsh[M*2];
struct node{
int l,r,t;
bool operator<(const node&n)const{
return r<n.r;
}
}d[M];
int dfs(int x,int y)
{
if(x>m)
return 0;
if(dp[x][y]!=-1)
return dp[x][y];
int ret=0,
a=lower_bound(lsh+1,lsh+2*m+1,d[x].l)-lsh,
b=lower_bound(lsh+1,lsh+2*m+1,d[x].r+r)-lsh;
if(a>=y)
ret=dfs(x+1,b)+d[x].t;
ret=max(ret,dfs(x+1,y));
return dp[x][y]=ret;
}
int main()
{
memset(dp,-1,sizeof(dp));
scanf("%d%d%d",&n,&m,&r);
for(int i=1;i<=m;i++)
scanf("%d%d%d",&d[i].l,&d[i].r,&d[i].t),lsh[2*i-1]=d[i].r+r,lsh[2*i]=d[i].l;
sort(d+1,d+m+1);
sort(lsh+1,lsh+2*m+1);
printf("%d",dfs(1,0));
return 0;
}
[USACO2007NOVS] Milking Time S的更多相关文章
- POJ2455Secret Milking Machine[最大流 无向图 二分答案]
Secret Milking Machine Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11865 Accepted ...
- Milking Cows
Milking Cows Three farmers rise at 5 am each morning and head for the barn to milk three cows. The f ...
- POJ 2185 Milking Grid KMP(矩阵循环节)
Milking Grid Time Limit: 3000MS Memory Lim ...
- Optimal Milking 分类: 图论 POJ 最短路 查找 2015-08-10 10:38 3人阅读 评论(0) 收藏
Optimal Milking Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 13968 Accepted: 5044 Case ...
- POJ2112 Optimal Milking (网络流)(Dinic)
Optimal Milking Time Limit: 2000MS Memory Limit: 30000K T ...
- 洛谷P1204 [USACO1.2]挤牛奶Milking Cows
P1204 [USACO1.2]挤牛奶Milking Cows 474通过 1.4K提交 题目提供者该用户不存在 标签USACO 难度普及- 提交 讨论 题解 最新讨论 请各位帮忙看下程序 错误 ...
- 【USACO】Milking Cows
Three farmers rise at 5 am each morning and head for the barn to milk three cows. The first farmer b ...
- POJ 2185 Milking Grid(KMP)
Milking Grid Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 4738 Accepted: 1978 Desc ...
- poj 3616 Milking Time
Milking ...
- codeforce ---A. Milking cows
A. Milking cows time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
随机推荐
- arthas的安装及使用
arthas的安装及使用 官方文档 安装 #1.下载 https://arthas.aliyun.com/download/latest_version?mirror=aliyun #2.将下载文件上 ...
- 【matplotlib基础】--刻度
Matplotlib中刻度是用于在绘图中表示数据大小的工具. 刻度是坐标轴上的数字或标签,用于指示数据的大小或值,通常以整数或小数表示,具体取决于坐标轴的类型和限制. 1. 主次刻度 默认的绘制时,坐 ...
- Maven安装与配置教程
一.安装前检查 检查电脑上是否安装JDK,如果没有安装,请查看JDK安装教程:点我查看 如果电脑上已经安装JDK,按Win 和R键,输入cmd,然后点击确定 输入java -version,点击回车, ...
- 【RocketMQ】消息的拉取总结
在上一讲中,介绍了消息的存储,生产者向Broker发送消息之后,数据会写入到CommitLog中,这一讲,就来看一下消费者是如何从Broker拉取消息的. RocketMQ消息的消费以组为单位,有两种 ...
- .NET中测量多线程基准性能
多线程基准性能是用来衡量计算机系统或应用程序在多线程环境下的执行能力和性能的度量指标.它通常用来评估系统在并行处理任务时的效率和性能.测量中通常创建多个线程并在这些线程上执行并发任务,以模拟实际应用程 ...
- 织梦DEDEBIZ调用全站文章数量
织梦DEDEBIZ如何调用全站文章数量{dede:sql sql="select count(*) as c from biz_archives} 共有文章:[field:c/] 篇 {/d ...
- Teamcenter RAC 开发之《Excel模版导出》
背景 在做 Teamcenter RAC客制化表单后,TMD肯定有一个需求要导出表单,毕竟所谓的客制化表单就是从纸质表单中出来的,那么写代码必不可少......... 那么问题来了,对于一个Excel ...
- StackOverflow 并不只是一个问答网站
首页 新文章 联系 管理 订阅 StackOverflow 并不只是一个问答网站 今天看到了一个网站的模仿StackOverflow的问答应用,有点儿感慨:是不是设计这个模仿应用的人,真 ...
- win10系统单独编译和使用WebRTC的回声消除(AEC)、音频增益(AGC)、去噪(NS)模块
一.简介 本人想单独编译并使用WebRTC的音频回声消除模块,奈何技术有限,于是在百度的海洋里大海捞针,发现了https://www.cnblogs.com/mod109/p/5827918.html ...
- 在 kubernetes 环境中实现 gRPC 负载均衡
前言 前段时间写过一篇 gRPC 的入门文章,在最后还留了一个坑没有填: 也就是 gRPC 的负载均衡问题,因为当时的业务请求量不算大,再加上公司没有对 Istio 这类服务网格比较熟悉的大牛,所以我 ...