以后有空再写一下思路。
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 typedef struct { 5 double border; 6 double v; 7 }DP; 8 typedef struct { 9 double a, b, c; 10 }V; 11 int cmp(const void* p, const void* q) { 12 return (*(V*)p).a > (*(V*)q).a ? 1 : -1; 13 } 14 int main() { 15 int M; 16 long long int N; 17 DP dp[501]; 18 V v[501]; 19 cin >> N >> M; 20 for (int i = 1; i <=M; i++)cin >> v[i].a >> v[i].b >> v[i].c; 21 qsort(v, M, sizeof(v[0]), cmp); 22 dp[0].border = 0; 23 dp[0].v = 0; 24 for (int i = 1; i <= M; i++) { 25 if (v[i].a >= dp[i - 1].border) { 26 dp[i].border = v[i].b; 27 dp[i].v = dp[i - 1].v + v[i].c; 28 } 29 else { 30 dp[i].border = max(dp[i - 1].border, v[i].b); 31 int k; 32 for (int j = 1; j <=i; j++) { 33 if (dp[j].border > v[i].a && dp[j - 1].border <= v[i].a) { 34 k = j; 35 break; 36 } 37 } 38 k -= 1; 39 dp[i].v = max(dp[k].v + v[i].c, dp[i - 1].v); 40 } 41 } 42 cout << dp[M].v << endl; 43 return 0; 44 }