ACM 156. [USACO Nov07] 挤奶时间(dp)

来源:互联网 发布:pathfinder软件下载 编辑:程序博客网 时间:2024/04/27 22:43

156. [USACO Nov07] 挤奶时间

★☆   输入文件:milkprod.in   输出文件:milkprod.out   简单对比
时间限制:1 s   内存限制:128 MB

译 By CmYkRgB123

描述

贝茜是一只非常努力工作的奶牛,她总是专注于提高自己的产量。为了产更多的奶,她预计好了接下来的N (1 ≤ N ≤ 1,000,000)个小时,标记为0..N-1。

Farmer John 计划好了 M (1 ≤ M ≤ 1,000) 个可以挤奶的时间段。每个时间段有一个开始时间(0 ≤ 开始时间 ≤ N), 和一个结束时间 (开始时间 < 结束时间 ≤ N), 和一个产量 (1 ≤ 产量 ≤ 1,000,000) 表示可以从贝茜挤奶的数量。Farmer John 从分别从开始时间挤奶,到结束时间为止。每次挤奶必须使用整个时间段。

但即使是贝茜也有她的产量限制。每次挤奶以后,她必须休息 R (1 ≤ R ≤ N) 个小时才能下次挤奶。给定Farmer John 计划的时间段,请你算出在 N 个小时内,最大的挤奶的量。

输入

  • 第 1 行: 三个整数 N, M, R
  • 第 2..M+1 行: 第 i+1 行 每行三个整数,为Farmer John挤奶计划的开始时间,结束时间,产量。

输出

  • 第 1 行:一个整数 在 N 个小时内,最大的挤奶的量.

样例输入

12 4 21 2 810 12 193 6 247 10 31

样例输出

43

dp

读取数据时从1开始,排序却忘记+1。。。。。


#include <iostream>#include <cstdio>#include <cstdlib>using namespace std;#define MAX_M 10000#define MAX_N 1000001struct TIMEQ{int s,t;int val;} TimeQ[MAX_M];int N,M,R;int dp[MAX_M];int cmp(const void *a,const void *b){TIMEQ *pa,*pb;pa=(TIMEQ *)a;pb=(TIMEQ *)b;return pa->t-pb->t;}int main(){freopen("milkprod.in","r",stdin);freopen("milkprod.out","w",stdout);scanf("%d%d%d",&N,&M,&R);for(int i=1;i<=M;i++){scanf("%d%d%d",&TimeQ[i].s,&TimeQ[i].t,&TimeQ[i].val);}qsort(TimeQ,M+1,sizeof(TIMEQ),cmp);for(int i=1;i<=M;i++){dp[i]=dp[i-1];for(int j=1;j<i;j++){if(TimeQ[j].t+R<=TimeQ[i].s){dp[i]=max(dp[j]+TimeQ[i].val,dp[i]);}}dp[i]=max(dp[i],TimeQ[i].val);}printf("%d\n",dp[M]);return 0;}



0 0
原创粉丝点击