zoukankan      html  css  js  c++  java
  • POJ 3616 Milking Time (排序+dp)

    题目链接:http://poj.org/problem?id=3616

    有头牛产奶n小时(n<=1000000),但必须在m个时间段内取奶,给定每个时间段的起始时间和结束时间以及取奶质量

    且两次取奶之间须间隔r-1个小时,求最大取奶质量

    也就是说r = 2时 3分结束取奶,至少在5分才能取。

    按照时间排序,dp[i]表示i时段的最大产奶量

     1 //#pragma comment(linker, "/STACK:102400000, 102400000")
     2 #include <algorithm>
     3 #include <iostream>
     4 #include <cstdlib>
     5 #include <cstring>
     6 #include <cstdio>
     7 #include <vector>
     8 #include <cmath>
     9 #include <ctime>
    10 #include <list>
    11 #include <set>
    12 #include <map>
    13 using namespace std;
    14 typedef long long LL;
    15 typedef pair <int, int> P;
    16 const int N = 1e3 + 5;
    17 struct data {
    18     int l, r, val;
    19     bool operator <(const data& cmp) const {
    20         return l < cmp.l;
    21     }
    22 }a[N];
    23 int dp[N];
    24 
    25 int main()
    26 {
    27     int n, m, r;
    28     while(~scanf("%d %d %d", &n, &m, &r)) {
    29         memset(dp, 0, sizeof(dp));
    30         for(int i = 1; i <= m; ++i) {
    31             scanf("%d %d %d", &a[i].l, &a[i].r, &a[i].val);
    32         }
    33         sort(a + 1, a + m + 1);
    34         int res = 0;
    35         for(int i = 1; i <= m; ++i) {
    36             dp[i] = a[i].val;
    37             for(int j = 1; j < i; ++j) {
    38                 if(a[i].l - a[j].r >= r) {
    39                     dp[i] = max(dp[i], dp[j] + a[i].val);
    40                 }
    41             }
    42             res = max(res, dp[i]);
    43         }
    44         printf("%d
    ", res);
    45     }
    46     return 0;
    47 }
  • 相关阅读:
    防抖函数
    锁屏功能
    配置编译环境和线上环境之间的切换
    vue-router中的滚动行为
    axios的再次封装
    Anaconda 镜像配置
    Python 包管理工具 pip 与 conda
    Anaconda 安装与卸载
    VS Code 配置和使用
    解决 VS Code 无法使用Ctrl+C等快捷键
  • 原文地址:https://www.cnblogs.com/Recoder/p/5781701.html
Copyright © 2011-2022 走看看