• VK Cup 2012 Qualification Round 1 E. Phone Talks


    E. Phone Talks
    time limit per test
    3 seconds
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    Cool J has recently become a businessman Mr. Jackson, and he has to make a lot of phone calls now. Today he has n calls planned. For each call we know the moment ti (in seconds since the start of the day) when it is scheduled to start and its duration di (in seconds). All ti are different. Mr. Jackson is a very important person, so he never dials anybody himself, all calls will be incoming.

    Mr. Jackson isn't Caesar and he can't do several things at once. If somebody calls him while he hasn't finished the previous conversation, Mr. Jackson puts the new call on hold in the queue. In this case immediately after the end of the current call Mr. Jackson takes the earliest incoming call from the queue and starts the conversation. If Mr. Jackson started the call at the second t, and the call continues for d seconds, then Mr. Jackson is busy at seconds t, t + 1, ..., t + d - 1, and he can start a new call at second t + d. Note that if Mr. Jackson is not busy talking when somebody calls, he can't put this call on hold.

    Mr. Jackson isn't Napoleon either, he likes to sleep. So sometimes he allows himself the luxury of ignoring a call, as if it never was scheduled. He can ignore at most k calls. Note that a call which comes while he is busy talking can be ignored as well.

    What is the maximum number of seconds Mr. Jackson can sleep today, assuming that he can choose an arbitrary continuous time segment from the current day (that is, with seconds from the 1-st to the 86400-th, inclusive) when he is not busy talking?

    Note that some calls can be continued or postponed to the next day or even later. However, the interval for sleep should be completely within the current day.

    Input

    The first input line contains a pair of integers n, k (0 ≤ k ≤ n ≤ 4000) separated by a space. Following n lines contain the description of calls for today. The description of each call is located on the single line and consists of two space-separated integers ti and di, (1 ≤ ti, di ≤ 86400). All ti are distinct, the calls are given in the order of strict increasing ti.

    Scheduled times of calls [ti, ti + di - 1] can arbitrarily intersect.

    Output

    Print a number from 0 to 86400, inclusive — the maximally possible number of seconds for Mr. Jackson to sleep today.

    Sample test(s)
    Input
    3 2
    30000 15000
    40000 15000
    50000 15000
    Output
    49999
    Input
    5 1
    1 20000
    10000 10000
    20000 20000
    25000 10000
    80000 60000
    Output
    39999
    Note

    In the first sample the most convenient way is to ignore the first two calls.

    In the second sample it is best to ignore the third call. In this case Mr. Jackson will have been speaking:

    • first call: from 1-st to 20000-th second,
    • second call: from 20001-st to 30000-th second,
    • fourth call: from 30001-st to 40000-th second (the third call is ignored),
    • fifth call: from 80000-th to 139999-th second.

    Thus, the longest period of free time is from the 40001-th to the 79999-th second.

    DP;;;

    #include<stdio.h>
    #include<iostream>
    #include<string>
    #include<string.h>
    using namespace std;
    int dp[4005][4005];
    struct node
    {
    int s,d;
    };
    node a[4005];
    int main()
    {
    int i,j,n,k,ans;
    while(scanf("%d%d",&n,&k)!=EOF)
    {
    for(i=0;i<n;++i)
    {
    scanf("%d%d",&a[i].s,&a[i].d);
    }



    ans=0;
    for(i=0;i<=n;++i)
    {

    for(j=0;j<=k;++j)
    {
    dp[i][j]=86401;
    }
    }


    dp[0][0]=1;
    for(i=0;i<n;++i)
    {
    for(j=0;j<=k;++j)
    {
    if(j!=k)
    dp[i+1][j+1]=min(dp[i+1][j+1],dp[i][j]);
    if(dp[i][j]<a[i].s)
    {
    ans=max(ans,a[i].s-dp[i][j]);
    dp[i+1][j]=min(dp[i+1][j],a[i].s+a[i].d);
    }
    else
    {
    dp[i+1][j]=min(dp[i+1][j],dp[i][j]+a[i].d);
    }
    }
    }



    for(j=0;j<=k;++j)
    {
    ans=max(ans,86401-dp[n][j]);
    }
    printf("%d\n",ans);
    }

    return 0;


    }
  • 相关阅读:
    NodeJS系列~第一个小例子,实现了request.querystring功能
    JS~js里实现队列与堆栈
    最新CSS兼容方案
    js传真实地址 C:fakepath
    IE11的变化 navigator.userAgent中不再包含“MSIE”关键字
    看看该死的jquery.form.js的用法,不是个东西
    bootstrap模态框怎么传递参数
    方法的直接调用,反射调用
    IIS 7.5 配置伪静态
    TrippleDESCSPEncrypt 加密解密试试看
  • 原文地址:https://www.cnblogs.com/kuangbin/p/2380629.html
Copyright © 2020-2023  润新知