codevs 3095 黑心的市长

以后有空再写一下思路。

 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 }

猜你喜欢

转载自www.cnblogs.com/ip8080/p/11051680.html
今日推荐