题目描述

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的更多相关文章

  1. POJ2455Secret Milking Machine[最大流 无向图 二分答案]

    Secret Milking Machine Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11865   Accepted ...

  2. Milking Cows

    Milking Cows Three farmers rise at 5 am each morning and head for the barn to milk three cows. The f ...

  3. POJ 2185 Milking Grid KMP(矩阵循环节)

                                                            Milking Grid Time Limit: 3000MS   Memory Lim ...

  4. Optimal Milking 分类: 图论 POJ 最短路 查找 2015-08-10 10:38 3人阅读 评论(0) 收藏

    Optimal Milking Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 13968 Accepted: 5044 Case ...

  5. POJ2112 Optimal Milking (网络流)(Dinic)

                                             Optimal Milking Time Limit: 2000MS   Memory Limit: 30000K T ...

  6. 洛谷P1204 [USACO1.2]挤牛奶Milking Cows

    P1204 [USACO1.2]挤牛奶Milking Cows 474通过 1.4K提交 题目提供者该用户不存在 标签USACO 难度普及- 提交  讨论  题解 最新讨论 请各位帮忙看下程序 错误 ...

  7. 【USACO】Milking Cows

    Three farmers rise at 5 am each morning and head for the barn to milk three cows. The first farmer b ...

  8. POJ 2185 Milking Grid(KMP)

    Milking Grid Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 4738   Accepted: 1978 Desc ...

  9. poj 3616 Milking Time

                                                                                                 Milking ...

  10. codeforce ---A. Milking cows

    A. Milking cows time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

随机推荐

  1. dBeaver操作iotdb并实现导入和导出

    1.windows下操作iotdb,现在官网下载相关的iotdb包 官网地址:https://archive.apache.org/dist/iotdb/   一般建议下载 -all的  2.打开db ...

  2. 【干货】华为云图数据库GES技术演进

    本文分享自华为云社区<[干货]华为云图数据库GES技术演进>,作者: Chenyi. 1 背景 大规模图数据无处不在,图查询.分析和表示学习已成为大数据和AI的核心部分之一.特别是知识图谱 ...

  3. 项目开展CICD的实践探路

    本文介绍了作者对CICD的理解以及在项目中开展CICD的几种场景,总结了每种场景实践的关键节点.带来的收益,以及结合具体项目开展的实际应用.读者可以借鉴本文中描述的场景,或借鉴文中提到的实践方式,在项 ...

  4. 【升职加薪秘籍】我在服务监控方面的实践(8)-elasticsearch 性能监控与分析手段

    大家好,我是蓝胖子,之前讲了mysql,redis中间件的监控,今天我们再来看看另一个基础组件elasticsearch,如何对它进行监控,当你思考如何对一个组件进行监控时,四大黄金指标会告诉你答案, ...

  5. mall :hutool项目源码解析

    目录 一.mall开源项目 1.1 来源 1.2 项目转移 1.3 项目克隆 二.Hutool工具类库 2.1 Hutool 简介 三.源码解析 3.1 集成与配置 3.1.1 导入依赖 3.1.2 ...

  6. 快速理解DDD领域驱动设计架构思想-基础篇

    1 前言 本文与大家一起学习并介绍领域驱动设计(Domain Drive Design) 简称DDD,以及为什么我们需要领域驱动设计,它有哪些优缺点,尽量用一些通俗易懂文字来描述讲解领域驱动设计,本篇 ...

  7. 20个最佳实践提升Terraform工作流程|Part 1

    Terraform 是管理基础设施及代码(IaC)最常用的工具之一,它能使我们安全且可预测地对基础设施应用更改.刚开始上手 Terraform 可能会感觉有些不容易,但很快就能对该工具有基本的了解,随 ...

  8. Springboot中使用线程池的三种方式

    前言 多线程是每个程序员的噩梦,用得好可以提升效率很爽,用得不好就是埋汰的火葬场. 这里不深入介绍,主要是讲解一些标准用法,熟读唐诗三百首,不会作诗也会吟. 这里就介绍一下springboot中的多线 ...

  9. c语言代码练习8

    //输入两个数组,输出两个数字的最大公约数#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { int n = ...

  10. JavaCore extends Plugin

    /******************************************************************************* 2 * Copyright (c) 2 ...