题意:给m个区间,每个区间一个值,区间之间可能重叠。选取间距大于R的若干不相交区间,求最大的值。
不知道N的作用是什么,直接DP。
#include <iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define N 1100
using namespace std;
struct node
{
int s,t,v;
}a[N];
int d[N];
bool cmp(node a,node b)
{
return a.s<b.s;
}
int main()
{
int n,m,r;
while(~scanf("%d%d%d",&n,&m,&r))
{
for(int i=0;i<m;i++) scanf("%d%d%d",&a[i].s,&a[i].t,&a[i].v);
sort(a,a+m,cmp);
memset(d,0,sizeof(d));
int ans=0;
for(int i=0;i<m;i++)
{
d[i]=a[i].v;
for(int j=0;j<i;j++)
if(a[i].s>=a[j].t+r)
d[i]=max(d[i],d[j]+a[i].v);
ans=max(ans,d[i]);
}
cout<<ans<<endl;
}
}