POJ 3616
叙述比较xiong残的一道题....
需要注意一点,劳模奶牛歇够可以无缝衔接工作(对应判断条件是等号的意思)...因此不幸贡献了一发WA
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn= 1e6+5;
const int maxm= 1005;
struct Intv
{
int s, e, g;
bool operator < (const Intv & a) const
{
return e< a.e || (e== a.e && s< a.s);
}
Intv()= default;
Intv(int ss, int ee, int gg) : s(ss), e(ee), g(gg) {}
}fj[maxm];
int n, m, r;
int dp[maxm];
int main()
{
scanf("%d %d %d", &n, &m, &r);
for (int i= 1; i<= m; ++i){
Intv tt;
scanf("%d %d %d", &(tt.s), &(tt.e), &(tt.g));
fj[i]= tt;
}
sort(fj+1, fj+m+1);
memset(dp, 0, sizeof(dp));
dp[1]= fj[1].g;
for (int i= 2; i<= m; ++i){
if (fj[i-1].e+r <= fj[i].s){
dp[i]= dp[i-1]+fj[i].g;
}
else{
dp[i]= max(dp[i-1], fj[i].g);
for (int j= i-2; j> 0; --j){
if (fj[j].e+r <= fj[i].s){
int tm= dp[j]+fj[i].g;
if (tm> dp[i]){
dp[i]= tm;
}
break;
}
}
}
}
cout<< dp[m];
return 0;
}