zoukankan      html  css  js  c++  java
  • P1280 尼克的任务

     P1280 尼克的任务

    题目描述

    尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的部门当天要完成的全部任务,每个任务由一个开始时刻与一个持续时间构成。

    尼克的一个工作日为N分钟,从第一分钟开始到第N分钟结束。当尼克到达单位后他就开始干活。如果在同一时刻有多个任务需要完戍,尼克可以任选其中的一个来做,而其余的则由他的同事完成,反之如果只有一个任务,则该任务必需由尼克去完成,假如某些任务开始时刻尼克正在工作,则这些任务也由尼克的同事完成。如果某任务于第P分钟开始,持续时间为T分钟,则该任务将在第P+T-1分钟结束。

    写一个程序计算尼克应该如何选取任务,才能获得最大的空暇时间。

    输入输出格式

    输入格式:

    输入数据第一行含两个用空格隔开的整数N和K(1≤N≤10000,1≤K≤10000),N表示尼克的工作时间,单位为分钟,K表示任务总数。

    接下来共有K行,每一行有两个用空格隔开的整数P和T,表示该任务从第P分钟开始,持续时间为T分钟,其中1≤P≤N,1≤P+T-1≤N。

    输出格式:

    输出文件仅一行,包含一个整数,表示尼克可能获得的最大空暇时间。

    输入输出样例

    输入样例#1:
    15 6
    1 2
    1 6
    4 11
    8 5
    8 1
    11 5
    
    输出样例#1:
    4

    分析:线性dp;不过要倒着推。
    f[i]表示i时刻之后的最大空闲时间,如果该时刻没有工作开始,那就是说明这一时刻是空闲时间,则
    f[i]=f[i+1]+1
    如果有,就更新f[i]的值,那么在所有需要开始的工作中选一个最优的,直到该时间点没有工作开始为止。
    那要怎么选?在所有结束时间中找最大的。就是 当前时间加上完成这件任务的耗时,也就是结束时间了,在这些时间中需找 f[] 最大的。

     1 #include<cstdio>
     2 #include<algorithm>
     3 using namespace std;
     4 
     5 int n,k;
     6 struct Task{
     7     int beg,len;
     8 }t[10100];
     9 int f[10010];
    10 
    11 int main()
    12 {
    13     scanf("%d%d",&n,&k);
    14     for(int i=1;i<=k;++i)
    15         scanf("%d%d",&t[i].beg,&t[i].len);
    16     int now = k;
    17     for(int i=n;i>=1;--i)
    18     {
    19         if(t[now].beg!=i) f[i] = f[i+1]+1;
    20         else while(t[now].beg==i)
    21         {
    22             f[i] = max(f[i],f[i+t[now].len]);
    23             now--;
    24         }
    25     }
    26     printf("%d
    ",f[1]);
    27     return 0;
    28 }
    
    
    



  • 相关阅读:
    numpy 基础 —— np.linalg
    图像旋转后显示不完全
    opencv ---getRotationMatrix2D函数
    PS1--cannot be loaded because the execution of scripts is disabled on this system
    打开jnlp Faild to validate certificate, the application will not be executed.
    BATCH(BAT批处理命令语法)
    oracle vm virtualbox 如何让虚拟机可以上网
    merge 实现
    Windows batch,echo到文件不成功,只打印出ECHO is on.
    python2.7.6 , setuptools pip install, 报错:UnicodeDecodeError:'ascii' codec can't decode byte
  • 原文地址:https://www.cnblogs.com/mjtcn/p/6856636.html
Copyright © 2011-2022 走看看