• POJ 3616 Milking Time(dp)


    POJ 3616 Milking Time

    分析:简单的动态规划,先根据开始时间进行排序

       定义状态:dp[i]为前i个时间段所取得的最优解

       很容易想到0 - i时间段的最优解为前0 - i-1个时间段内并且结束时间没有超过i的开始时间的情况的最优解在加上第i时间段的值

    代码:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int MAX_M = 1000;
    int N, M, R;
    typedef struct {
        int start, end, eff;
    } P;
    P a[MAX_M]; 
    int dp[MAX_M];
    bool compare(P x, P y) {
        return x.start < y.start;
    }
    int main() {
        scanf("%d%d%d", &N, &M, &R);
        for(int i = 0; i < M; i++) {
            scanf("%d%d%d", &a[i].start, &a[i].end, &a[i].eff);
            a[i].end += R;  
        } 
        sort(a, a+M, compare);
        for(int i = 0; i < M; i++) {
            dp[i] = a[i].eff;
            for(int j = 0; j < i; j++) {
                if(a[j].end <= a[i].start) dp[i] = max(dp[i], dp[j] + a[i].eff);
            }
        }
        cout << *max_element(dp, dp+M) << endl;
        return 0;
    }
    作者:kindleheart
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    攀岩
    插入排序
    runtime error
    vector
    旅行家
    九键字母组合
    [蓝桥杯][基础训练]Sine之舞
    代码计算程序运行的时间
    max_element
    distance
  • 原文地址:https://www.cnblogs.com/kindleheart/p/8603566.html
Copyright © 2020-2023  润新知