BZOJ 1642: [Usaco2007 Nov]Milking Time 挤奶时间

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1642

解:用f[i]来表示我们第i段时间挤奶的情况下,在此之前(包括自身),最多能产多少奶。

最后找到最大的f[i].

程序:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct ding{
  int s,e,p;
}q[2000000];
int dp[2000000],n,m,r;
bool cmp(const ding&x,const ding&y){return (x.s==y.s?x.e<y.e:x.s<y.s);}
int main()
{
  scanf("%d%d%d",&n,&m,&r);
  for (int i=1;i<=m;i++) scanf("%d%d%d",&q[i].s,&q[i].e,&q[i].p);
  sort(q+1,q+1+m,cmp);
  for (int i=1;i<=m;i++)
  {
      dp[i]=q[i].p;
      for (int j=1;j<=i-1;j++)
      if (q[j].e+r<=q[i].s) dp[i]=max(dp[i],dp[j]+q[i].p);
  }
  int ans=0;
  for (int i=1;i<=m;i++) ans=max(dp[i],ans);
  printf("%d
",ans);
  return 0;
}
原文地址:https://www.cnblogs.com/2014nhc/p/6660431.html