#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> using namespace std; const int N=1010; struct edge{ int start; int end; int w; }e[N]; bool cmp(edge a,edge b) { return a.start<b.start; } int dp[N]; int main() { int n,m,R; cin>>n>>m>>R; for(int i=1;i<=m;i++) { cin>>e[i].start>>e[i].end>>e[i].w; //实际结束的时间=结束时间+休息时间 e[i].end+=R; } //按照开始时间从小到大排序 sort(e+1,e+1+m,cmp); for(int i=1;i<=m;i++) { dp[i]=e[i].w; for(int j=1;j<i;j++) if(e[j].end<=e[i].start) dp[i]=max(dp[i],dp[j]+e[i].w); } int ans=0; for(int i=0;i<=m;i++) ans=max(ans,dp[i]); cout<<ans<<endl; return 0; }
原文地址:https://www.cnblogs.com/QingyuYYYYY/p/12238761.html
时间: 2024-10-08 07:46:29