题目链接:http://codeforces.com/problemset/problem/158/E

题意:

  你有n个电话要接,每个电话打进来的时刻为第t[i]分钟,时长为d[i]分钟。

  每一个电话打进来时,你有两种选择:

    将电话挂掉,或接听(如果当时正在打其他电话,则这个电话加入等待队列,等上一个电话打完后立马接听)

  你最多能挂掉k个电话。

  时间从第1分钟开始算,一直到86400分钟结束,问你能够获得的最长连续间隔为多长时间。

题解:

  表示状态:

    dp[i][j] = clocks

    表示打了前i个电话,挂掉了其中j个电话,打完这些电话的最早时刻。

  找出答案:

    有一个贪心结论,就是这k次挂电话的机会必须用完。

    特别地,t[n+1] = 86401。

    ans = min t[i+1]-dp[i][k]-1

  如何转移:

    dp[i][j] = min( max(dp[i-1][j]+d[i],t[i]+d[i]-1), dp[i-1][j-1] )

    对于第i个电话,要么接,要么不接。

    如果接,则第i个电话开始的时刻为max(dp[i-1][j]+1, t[i]),所以结束时刻为max(dp[i-1][j]+d[i],t[i]+d[i]-1)。

    如果不接,则最后时刻还是dp[i-1][j-1]。

  边界条件:

    dp[0][0] = 0

    others = INF

    另外,当n == 0时要特判,直接输出86400即可。

AC Code:

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #define MAX_N 4005
  5. #define MAX_K 4005
  6.  
  7. using namespace std;
  8.  
  9. int n,k;
  10. int t[MAX_N];
  11. int d[MAX_N];
  12. int dp[MAX_N][MAX_K];
  13.  
  14. void read()
  15. {
  16. cin>>n>>k;
  17. for(int i=;i<=n;i++)
  18. {
  19. cin>>t[i]>>d[i];
  20. }
  21. t[n+]=;
  22. }
  23.  
  24. void work()
  25. {
  26. if(n==)
  27. {
  28. cout<<""<<endl;
  29. return;
  30. }
  31. memset(dp,0x3f,sizeof(dp));
  32. dp[][]=;
  33. for(int i=;i<=n;i++)
  34. {
  35. for(int j=;j<=min(i,k);j++)
  36. {
  37. dp[i][j]=max(dp[i-][j]+d[i],t[i]+d[i]-);
  38. if(j>) dp[i][j]=min(dp[i][j],dp[i-][j-]);
  39. }
  40. }
  41. int ans=;
  42. for(int i=;i<=n;i++)
  43. {
  44. ans=max(ans,t[i+]-dp[i][k]-);
  45. }
  46. cout<<ans<<endl;
  47. }
  48.  
  49. int main()
  50. {
  51. read();
  52. work();
  53. }

Codeforces 158E Phone Talks:dp的更多相关文章

  1. Codeforces 893E Counting Arrays:dp + 线性筛 + 分解质因数 + 组合数结论

    题目链接:http://codeforces.com/problemset/problem/893/E 题意: 共q组数据(q <= 10^5),每组数据给定x,y(x,y <= 10^6 ...

  2. codeforces E. Phone Talks(dp)

    题目链接:http://codeforces.com/contest/158/problem/E 题意:给出一些电话,有打进来的时间和持续的时间,如果人在打电话,那么新打进来的电话入队,如果人没有打电 ...

  3. Codeforces 158E Phone Talks

    http://codeforces.com/contest/158/problem/E 题目大意: 麦克是个名人每天都要接n电话,每通电话给出打来的时间和持续时间,麦克可以选择接或不接,但是只能不接k ...

  4. Codeforces 478D Red-Green Towers:dp

    题目链接:http://codeforces.com/problemset/problem/478/D 题意: 给你r个红方块和g个绿方块,让你用这些方块堆一个塔. 最高层有1个方块,每往下一层块数+ ...

  5. Codeforces 429B Working out:dp【枚举交点】

    题目链接:http://codeforces.com/problemset/problem/429/B 题意: 给你一个n*m的网格,每个格子上有一个数字a[i][j]. 一个人从左上角走到右下角,一 ...

  6. Codeforces 895C Square Subsets:状压dp【组合数结论】

    题目链接:http://codeforces.com/problemset/problem/895/C 题意: 给你n个数a[i].(n <= 10^5, 1 <= a[i] <= ...

  7. CodeForces 163A Substring and Subsequence dp

    A. Substring and Subsequence 题目连接: http://codeforces.com/contest/163/problem/A Description One day P ...

  8. CodeForces 149D Coloring Brackets 区间DP

    http://codeforces.com/problemset/problem/149/D 题意: 给一个给定括号序列,给该括号上色,上色有三个要求 1.只有三种上色方案,不上色,上红色,上蓝色 2 ...

  9. Educational Codeforces Round 63-D(基础DP)

    题目链接:https://codeforces.com/contest/1155/problem/D 题意:给定n个数,可以选择一段连续子段将其乘x,也可以不操作,求最大连续子段和. 思路:比赛时觉得 ...

随机推荐

  1. 红米手机连接logcat,调试信息刷屏解决办法

    我买了红米,平时拿它来当作安卓测试机的 可是把它接入eclipse里面,发现它会往logcat打印大量的日志,我自己想调试一个程序的时候,自己的程序的日志一会儿就被冲刷没了 新建一个logcat me ...

  2. SpringBoot项目的云服务器部署

    1.场景还原 springboot配置相当简单,人人皆知.怎么把springboot工程部署到云服务器上呢?可能有人会说,博主你前篇不是讲了java工程的云部署把:但是我想澄清一点的是,我前篇的工程都 ...

  3. Mybatis-There is no getter for property named 'id' in 'class java.lang.String'

    <mapper namespace="cn.telchina.standard.mapper.SysOrgnMapper"> <!-- <![CDATA[s ...

  4. struts2中配置文件加载的顺序是什么?

    struts2的StrutsPrepareAndExecuteFilter拦截器中对Dispatcher进行了初始化 在Dispatcher类的init方法中定义了配置文件的加载顺序(下面是源码) p ...

  5. ObjC消息机制

    深入浅出ObjC之消息    罗朝辉(http://blog.csdn.net/kesalin) 在入门级别的ObjC 教程中,我们常对从C++或Java 或其他面向对象语言转过来的程序员说,ObjC ...

  6. unity shader 编辑器扩展类 ShaderGUI

    这应该unity5才出的新功能了,今天看文档时刚巧看到了,就来尝试了一下. 效果如图: shader 的编辑器扩展分为2种方法: 是通过UnityEditor下的ShaderGUI类来实现的,形式比较 ...

  7. Java线程面试题:子线程先运行 2 次,然后主线程运行 4 次,如此反复运行 3 次

    package thread; /** * 需求:线程编程:子线程先运行 2 次,然后主线程运行 4 次,如此反复运行 3 次. * @author zhongfg * @date 2015-06-1 ...

  8. 基于镜像安装mysql

    准备目录 cd /opt mkdir -p mysql/data mysql/logs mysql/conf 查找MySql镜像版本 docker search mysql 安装指定版本的mysql镜 ...

  9. Intellij IDEA打开多项目窗口

    我版本是2016.02.04 其他版本可能不一样的设置

  10. win7 32位下载安装redis并安装php_redis扩展

    redis打包文件下载地址:http://files.cnblogs.com/files/cuiwenyuan/Redis-3.2.100-Windows-32.zip php_redis.dll下载 ...