http://poj.org/problem?id=3616
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<iostream>
#define N 1005
using namespace std;
int n, m, r, ans, tmp, st[N], ed[N], ef[N], dp[N], t;
int main()
{
scanf("%d%d%d", &n, &m, &r);
for (int i = 1; i <= m; i++)
{
scanf("%d%d%d", &st[i], &ed[i], &ef[i]);
dp[i] = ef[i];
}
ans = 0;
for (int i = 1; i < m; i++)
for (int j = i+1; j <= m; j++)
if (ed[i] > ed[j] || ed[i] == ed[j] && st[i] > st[j])
{
t = st[i];st[i] = st[j];st[j]=t;
t = ed[i];ed[i] = ed[j];ed[j]=t;
t = ef[i];ef[i] = ef[j];ef[j]=t;
t = dp[i];dp[i] = dp[j];dp[j]=t;
}
for (int i = 1; i <= m; i++)
{
tmp = st[i] - r;
for (int j = 1; j <= m && ed[j] <= tmp; j++)
{
dp[i] = max(dp[i], dp[j] + ef[i]);
}
ans = max(ans, dp[i]);
}
printf("%d\n", ans);
return 0;
}
本文提供了一种解决POJ 3616问题的有效算法实现,通过动态规划方法来求解最优解。代码使用C++编写,并详细展示了如何处理输入数据、进行任务调度以及更新状态以获取最终答案。
1288

被折叠的 条评论
为什么被折叠?



