题目链接:点击打开链接
以时间段进行DP即可
AC代码如下:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
struct interval
{
int beginTime, endTime;
int effec;
int operator < ( interval& o)
{
if(beginTime>o.beginTime) return 0;
else return 1;
}
};
interval Intervals[1005];
int N, M, R;
int main()
{
while(cin>>N>>M>>R)
{
for(int i=1; i<=M; ++i)
{
cin>>Intervals[i].beginTime;
cin>>Intervals[i].endTime;
Intervals[i].endTime += R;
cin>>Intervals[i].effec;
}
sort(Intervals+1,Intervals+M+1);
int dp[1005];
memset(dp,0,sizeof(dp));
for(int i=1; i<=M; ++i)
{
dp[i] = Intervals[i].effec;
for(int j=1; j<i; ++j)
{
if(Intervals[j].endTime<=Intervals[i].beginTime)
{
dp[i] = max(dp[i],Intervals[i].effec + dp[j]);
}
}
}
int maxN = 0;
for(int i=1; i<=M; ++i)
if(maxN<dp[i]) maxN = dp[i];
cout<<maxN<<endl;
}
return 0;
}