POJ 3616 Milking Time 动态规划

来源:互联网 发布:手机编程 输入法 编辑:程序博客网 时间:2024/05/17 07:07

dp[i]表示从第i个区间开始,能挤的最多的牛奶

动态转移方程为:

dp[i] = max(dp[i + 1], dp[j] + w[i]);

w[i]表示第i个区间能挤的牛奶

#include <map>#include <cmath>#include <queue>#include <cstdio>#include <vector>#include <cstring>#include <cstdlib>#include <iostream>#include <algorithm>#define MAX_N 1005#define mod 1000000000using namespace std;struct data{    int s, t, e;    bool operator < (const data& b) const    {        return s < b.s;    }};int main(){    //freopen("in.txt", "r", stdin);    int N, M, R;    data dat[MAX_N];    int dp[MAX_N];    scanf("%d%d%d", &N, &M, &R);    for (int i = 0; i < M; i++)        scanf("%d%d%d", &dat[i].s, &dat[i].t, &dat[i].e);    sort(dat, dat + M);    for (int i = M - 1; i >= 0; i--)    {        int j;        for (j = i; j < M; j++)//可以用二分优化            if (dat[j].s >= dat[i].t + R)                break;        if (j == M)            dp[i] = max(dp[i + 1], dat[i].e);        else            dp[i] = max(dp[i + 1], dp[j] + dat[i].e);    }    printf("%d\n", dp[0]);    return 0;}


0 0
原创粉丝点击