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;
}
posted @ 2021-03-08 19:18  IdiotNe  阅读(49)  评论(0编辑  收藏  举报