贝茜是一个勤劳的牛。事实上,她如此专注于最大化她的生产力,于是她决定安排下一个N(1≤N≤1,000,000)小时(方便地标记为0..N-1),以便她生产尽可能多的牛奶。
农民约翰有一个M(1≤M≤1,000)可能重叠的间隔列表,他可以在那里进行挤奶。每个区间我有一个起始小时(0≤starting_houri≤N),一个结束小时(starting_houri <ending_houri≤N),以及相应的效率(1≤efficiencyi≤1,000,000),表示他可以从中获取多少加仑的牛奶。贝西在那段时间。 Farmer John分别在开始时间和结束时间开始时开始和停止挤奶。在挤奶时,Bessie必须在整个间隔内挤奶。
尽管贝茜有其局限性。在任何间隔期间挤奶后,她必须休息R(1≤R≤N)小时才能再次开始挤奶。鉴于Farmer Johns的间隔清单,确定Bessie在N小时内可以产生的最大牛奶量。
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef struct{
int u,v,w;
}node ;
bool cmp(node &a,node &b){
return a.v<b.v;
}
node a[100001];
int main()
{
int m,n,p;
cin>>m>>n>>p;
for(int i = 0; i<n;i++)
cin>>a[i].u>>a[i].v>>a[i].w;
sort(a,a+n,cmp);
int dp[100001];
memset(dp, 0, sizeof dp);
int res = -0x3f3f;
for(int i=0 ;i< n ; i++){
dp[i]=a[i].w;
for(int j= 0;j< i ;j++)
if(a[j].v+p<=a[i].u)
dp[i] = max(dp[i],dp[j]+a[i].w);
res = max(res,dp[i]);
}
cout<<res<<endl;
}
起初想着最大值就是dp[n-1],但是一直Ac不了,后来看了看其他人的博客,其实最大的不一定是最后一个,也有可能在前面,所以有错,简单dp,练一练