题目链接:http://poj.org/problem?id=3616
题目大意:。。。
分析:(最大递增子序列)
ac代码
#include<cstdio>
#include<algorithm>
#define Max 1005
using namespace std;
int dp[Max];
struct milk
{
int start;
int end;
int effic;
}a[Max];
bool cmp(const struct milk &A, const struct milk &B)
{
if(A.start < B.start)return true;
else return false;
}
int max(int x, int y)
{
if(x > y)return x;
else return y;
}
int main()
{
int N, M, R;
scanf("%d %d %d", &N, &M, &R);
for(int i = 1; i <= M; i++)
scanf("%d %d %d", &a[i].start, &a[i].end, &a[i].effic);
for(int i = 1; i <= M; i++)
a[i].end = a[i].end + R;
N = N + R;
sort(a + 1, a + M + 1, cmp);
/*for(int i = 1; i <= M; i++)
printf("%d %d\n", a[i].start, a[i].end);*/
for(int i = 1; i <= M; i++)
{
dp[i] = a[i].effic;
for(int j = 1; j < i; j++)
if(a[j].end <= a[i].start)
dp[i] = max(dp[i], dp[j] + a[i].effic);
}
int ans = 0;
for(int i = 1; i <=M; i++)
ans = max(ans, dp[i]);
printf("%d\n", ans);
return 0;
}