codeforces 158E. Phone Talks(dp)
题目链接:
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)相关推荐
- Codeforces 919D Substring (拓扑图DP)
Codeforces 919D Substring (拓扑图DP) 手动博客搬家: 本文发表于20180716 10:53:12, 原地址https://blog.csdn.net/suncongbo ...
- [CodeForces 332B]Maximum Absurdity[DP]
题目链接: [CodeForces 332B]Maximum Absurdity[DP] 题意分析: 寻找两个不重叠的长度为k的子串,使得它们之和最大. 解题思路: 第一想法是,处理出从这个点开始,长 ...
- 【CodeForces 1042B --- Vitamins】DP+位运算
[CodeForces 1042B --- Vitamins]DP+位运算 题目来源:点击进入[CodeForces 1042B - Vitamins] Description Berland sho ...
- [CodeForces 300D Painting Square]DP
http://codeforces.com/problemset/problem/300/D 题意:每一次操作可以选一个正方形,令边长为n,如果n为奇数那么可以从中间画一个十字,分成4个大小相等的边长 ...
- Codeforces 1322D Reality Show (DP)
题目链接 https://codeforces.com/contest/1322/problem/D 题面写得非常模糊,很容易读错题,建议参考翻译:https://www.luogu.com.cn/p ...
- CodeForces - 1579G Minimal Coverage(dp)
题目链接:点击查看 题目大意:给出 nnn 个长度不同的木棍.设第 i−1i-1i−1 次放置木棍后的终点为 xxx,那么第 iii 个木棍有且仅有两种放置方法: 放到 [x+1,x+a[i]][x+ ...
- CodeForces - 1562E Rescue Niwen!(dp)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串 sss,将其子串按顺序展开成序列,即 {s1,s1s2,⋯,s1s2-sn,s2,s2s3,s2s3-sn,s3,s3s4,⋯,sn−1 ...
- CodeForces - 1551E Fixed Points(dp)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,需要求出删掉最少的数字,使得剩下的数字至少有 kkk 个位置满足 a[i]=ia[i]=ia[i]=i 成立 题目分析:看完数据范围不难想 ...
- CodeForces - 1484E Skyline Photo(dp+单调栈)
题目链接:点击查看 题目大意:给出 nnn 个建筑,每个建筑有一个高度和一个美丽值,现在要求划分为数个连续的区间,使得所有区间的贡献之和最大,其中每个区间的贡献值为,区间中高度最低的建筑物的美丽值 题 ...
- CodeForces - 1527E Partition Game(dp+线段树)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的数列,现在需要将其划分成 kkk 段,使得贡献和最小 对于每段区间 [l,r][l,r][l,r] 的贡献为,其中每个数字,其最后一次出现的位置 ...
最新文章
- 负样本修正:既然数据是模型的上限,就不要破坏这个上限
- 斐波那契数列(Fibonacci Sequence)
- python整数格式显示_[python之路]格式化显示
- python多线程写同一文件_Python多线程写文件实例
- python 默认参数_有趣的 Python 特性 3 | 当心默认可变参数这个大猪蹄子。
- SpringBoot多环境配置与使用
- VxRack与VxRail遭受Power的“全面入侵”
- 使用ViewSwitcher模拟手机屏幕应用分屏和切换
- epson机器人编程 范例_Epson机械手简单实例编程
- 面试官:内存耗尽后Redis会发生什么 ?
- 斐讯K2刷固件(支持v22.4.2.15以上)
- Java 基于mail.jar 和 activation.jar 封装的邮件发送工具类
- iPhone清理工具:4Easysoft iPhone Cleaner for Mac
- 计算机 蚂蚁搬家 教案,《观察蚂蚁搬家》教学设计
- Python语言中的注释方法应用
- Jenkins官方社区携手灵雀云成功举办Jenkins Meetup
- 【转载】BLE安全机制从入门到放弃
- 什么叫做java类的全限定名
- Maven项目报错:Caused by: java.lang.NoClassDefFoundError: com/fasterxml/classmate/Filter
- 安卓手机修改微信定位为中国大陆