• 【POJ】3616 Milking Time(dp)


    Milking Time
    Time Limit: 1000MS   Memory Limit: 65536K
    Total Submissions: 10898   Accepted: 4591

    Description

    Bessie is such a hard-working cow. In fact, she is so focused on maximizing her productivity that she decides to schedule her next N (1 ≤ N ≤ 1,000,000) hours (conveniently labeled 0..N-1) so that she produces as much milk as possible.

    Farmer John has a list of M (1 ≤ M ≤ 1,000) possibly overlapping intervals in which he is available for milking. Each interval i has a starting hour (0 ≤ starting_houri ≤ N), an ending hour (starting_houri <ending_houri ≤ N), and a corresponding efficiency (1 ≤ efficiencyi ≤ 1,000,000) which indicates how many gallons of milk that he can get out of Bessie in that interval. Farmer John starts and stops milking at the beginning of the starting hour and ending hour, respectively. When being milked, Bessie must be milked through an entire interval.

    Even Bessie has her limitations, though. After being milked during any interval, she must rest R (1 ≤ R ≤ N) hours before she can start milking again. Given Farmer Johns list of intervals, determine the maximum amount of milk that Bessie can produce in the N hours.

    Input

    * Line 1: Three space-separated integers: NM, and R
    * Lines 2..M+1: Line i+1 describes FJ's ith milking interval withthree space-separated integers: starting_houri , ending_houri , and efficiencyi

    Output

    * Line 1: The maximum number of gallons of milk that Bessie can product in the N hours

    Sample Input

    12 4 2
    1 2 8
    10 12 19
    3 6 24
    7 10 31

    Sample Output

    43

    Source

     
     
     
    -----------------------------------------------------------------------------------
     
     
    分析:这题看到题首先想到的是O(nm)做法,即用dp[i][j]表示i到j的最大产奶数。然而这种做法针对这道题目,连数组都开不下,更别提时间了。
      正确做法是这样子的,因为m比较小,所以先按照时间进行排序,然后可以用dp[i]表示前i次产奶的最大值,
      递推关系:第i个时间段挤奶的最大值 = 前 i – 1 个时间段挤奶最大值中的最大值 + 第i次产奶量。
     
     
     1 #include <cstdio>
     2 #include <algorithm>
     3 using namespace std;
     4 int dp[1000007];
     5 struct c{
     6     int begin,end,e;
     7 }a[1000007];
     8 bool cmp(c a,c b)
     9 {
    10     if(a.begin<b.begin) return true;
    11     if(a.begin==b.begin&&a.end<b.end) return true;
    12     return false;
    13 }
    14 int main()
    15 {
    16     int n,m,r;
    17     scanf("%d%d%d",&n,&m,&r);
    18     for(int i=1;i<=m;i++)
    19     {
    20         scanf("%d%d%d",&a[i].begin,&a[i].end,&a[i].e);
    21         a[i].end+=r;// 实际的结束时间还需要加上休息时间
    22     }
    23     sort(a+1,a+1+m,cmp);
    24     for(int i=1;i<=m;i++)
    25     {
    26         dp[i]=a[i].e;
    27         for(int j=1;j<=i;j++)
    28         {
    29             if(a[j].end<=a[i].begin)
    30             dp[i]=max(dp[i],dp[j]+a[i].e);
    31         }
    32     }
    33     printf("%d",*max_element(dp,dp+1+m));
    34     return 0;
    35 }
  • 相关阅读:
    Spring Security简单的登陆验证授权
    汽车之家汽车品牌Logo信息抓取 DotnetSpider实战[三]
    汽车之家店铺商品详情数据抓取 DotnetSpider实战[二]
    如何解决 MySQL报错:ERROR 1045 (28000)
    linux三剑客grep|sed|awk实践
    VMware中Linux启动时***Host SMBus controller not enabled的解决方法
    selenium初探:WebDriverException解决方法探索(以Chrome浏览器|IE浏览器|Edge浏览器为例)
    Windows10 64位 Python2.7 Matplotlib安装
    关于 水平制表符 Horizontal Tab (TAB)
    leetcode每日解题思路 221 Maximal Square
  • 原文地址:https://www.cnblogs.com/noblex/p/7773414.html
Copyright © 2020-2023  润新知