题目链接:

codeforces 158E


题目大意:

给出一些电话,有打进来的时间和持续的时间,如果人在打电话,那么新打进来的电话入队,如果人没有打电话,那么人必须立即接电话,或者选择一次放弃的机会,问这个最多有多长的连续的空闲的时间。


题目分析:

  • 定义状态dp[i][j]表示接到第i个电话在放弃j次的情况下最少需要多长时间。
  • 转移方程很简单:
    dp[i][j]=min(max(dp[i−1][j]+di,ti+di−1),dp[i−1][j−1])

    dp[i][j] = min ( max ( dp[i-1][j] + d_i , t_i+d_i-1 ) , dp[i-1][j-1] )

  • 然后枚举每一种情况,将相邻的电话全部跳过,那么就能够得到最长的休息的区间,具体见代码。
  • 对电话要首先按照起始时间进行排序。

AC代码:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#define MAX 4007using namespace std;int dp[MAX][MAX],n,k;struct Node
{int t,d;bool operator < ( const Node& a ) const{return t < a.t;}
}p[MAX];int main ( )
{while ( ~scanf ( "%d%d" , &n , &k ) ){for ( int i = 0 ; i < n ; i ++ )scanf ( "%d%d" , &p[i].t , &p[i].d );sort ( p , p+n );p[n].t = 86401;dp[0][1] = 0;dp[0][0] = p[0].t+p[0].d-1;if ( k == n ){puts ( "86400" );continue;}for ( int i = 1 ; i < n ; i++ ){dp[i][0] = max ( p[i].t-1 , dp[i-1][0] ) + p[i].d; for ( int j = 1 ; j <= k && j <= i; j++ ){int xx = p[i].t-1;if ( i-1 >= j ) xx = max ( xx , dp[i-1][j] );dp[i][j] = min ( xx + p[i].d, dp[i-1][j-1] );}}int ans = 0;for ( int i = 0 ;i < n ; i++ )for ( int j = 0 ; j <= k ; j++ ){int x = min ( n , k-j+i+1 );ans = max ( ans , p[x].t-1 - dp[i][j] );}printf ( "%d\n" , ans );}
}

codeforces 158E. Phone Talks(dp)相关推荐

  1. Codeforces 919D Substring (拓扑图DP)

    Codeforces 919D Substring (拓扑图DP) 手动博客搬家: 本文发表于20180716 10:53:12, 原地址https://blog.csdn.net/suncongbo ...

  2. [CodeForces 332B]Maximum Absurdity[DP]

    题目链接: [CodeForces 332B]Maximum Absurdity[DP] 题意分析: 寻找两个不重叠的长度为k的子串,使得它们之和最大. 解题思路: 第一想法是,处理出从这个点开始,长 ...

  3. 【CodeForces 1042B --- Vitamins】DP+位运算

    [CodeForces 1042B --- Vitamins]DP+位运算 题目来源:点击进入[CodeForces 1042B - Vitamins] Description Berland sho ...

  4. [CodeForces 300D Painting Square]DP

    http://codeforces.com/problemset/problem/300/D 题意:每一次操作可以选一个正方形,令边长为n,如果n为奇数那么可以从中间画一个十字,分成4个大小相等的边长 ...

  5. Codeforces 1322D Reality Show (DP)

    题目链接 https://codeforces.com/contest/1322/problem/D 题面写得非常模糊,很容易读错题,建议参考翻译:https://www.luogu.com.cn/p ...

  6. CodeForces - 1579G Minimal Coverage(dp)

    题目链接:点击查看 题目大意:给出 nnn 个长度不同的木棍.设第 i−1i-1i−1 次放置木棍后的终点为 xxx,那么第 iii 个木棍有且仅有两种放置方法: 放到 [x+1,x+a[i]][x+ ...

  7. CodeForces - 1562E Rescue Niwen!(dp)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串 sss,将其子串按顺序展开成序列,即 {s1,s1s2,⋯,s1s2-sn,s2,s2s3,s2s3-sn,s3,s3s4,⋯,sn−1 ...

  8. CodeForces - 1551E Fixed Points(dp)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,需要求出删掉最少的数字,使得剩下的数字至少有 kkk 个位置满足 a[i]=ia[i]=ia[i]=i 成立 题目分析:看完数据范围不难想 ...

  9. CodeForces - 1484E Skyline Photo(dp+单调栈)

    题目链接:点击查看 题目大意:给出 nnn 个建筑,每个建筑有一个高度和一个美丽值,现在要求划分为数个连续的区间,使得所有区间的贡献之和最大,其中每个区间的贡献值为,区间中高度最低的建筑物的美丽值 题 ...

  10. CodeForces - 1527E Partition Game(dp+线段树)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的数列,现在需要将其划分成 kkk 段,使得贡献和最小 对于每段区间 [l,r][l,r][l,r] 的贡献为,其中每个数字,其最后一次出现的位置 ...

最新文章

  1. 负样本修正:既然数据是模型的上限,就不要破坏这个上限
  2. 斐波那契数列(Fibonacci Sequence)
  3. python整数格式显示_[python之路]格式化显示
  4. python多线程写同一文件_Python多线程写文件实例
  5. python 默认参数_有趣的 Python 特性 3 | 当心默认可变参数这个大猪蹄子。
  6. SpringBoot多环境配置与使用
  7. VxRack与VxRail遭受Power的“全面入侵”
  8. 使用ViewSwitcher模拟手机屏幕应用分屏和切换
  9. epson机器人编程 范例_Epson机械手简单实例编程
  10. 面试官:内存耗尽后Redis会发生什么 ?
  11. 斐讯K2刷固件(支持v22.4.2.15以上)
  12. Java 基于mail.jar 和 activation.jar 封装的邮件发送工具类
  13. iPhone清理工具:4Easysoft iPhone Cleaner for Mac
  14. 计算机 蚂蚁搬家 教案,《观察蚂蚁搬家》教学设计
  15. Python语言中的注释方法应用
  16. Jenkins官方社区携手灵雀云成功举办Jenkins Meetup
  17. 【转载】BLE安全机制从入门到放弃
  18. 什么叫做java类的全限定名
  19. Maven项目报错:Caused by: java.lang.NoClassDefFoundError: com/fasterxml/classmate/Filter
  20. 安卓手机修改微信定位为中国大陆

热门文章

  1. pycharm:Updating Indices 解决办法
  2. C语言编译器之一,GCC编译器
  3. 获取Linux系统的网卡ip地址
  4. 三行代码实现`年月日`的弹出控件
  5. 解决方案:Win C++ mingw编译器出现 不支持的16位程序问题
  6. api—淘宝图片上传
  7. 问界M7开启交付 邹市明成精英车主
  8. win7计算机闪屏,win7电脑闪屏是什么原因
  9. 毕业设计必备案例:Python开发桌面程序——各种版本学生信息管理系统
  10. 白墙挂什么画 超美的6款白墙挂画选择推荐