cf831D(dp)
题目链接: http://codeforces.com/contest/831/problem/D
题意: 有 n 个人和 k 把钥匙, 数组 a 为 n 个人的初始位置, 数组 b 为 k 把钥匙的初始位置, n 个人都要先拿到一把钥匙然后在到 p 位置去, 问所有人都到 p 位置所需要的最少时间是多少.
思路: 这题即可以 dp 也可以直接二分答案.
dp 思路为: dp[i][j]存储前i个人在前j把钥匙中每个人得到钥匙的最小花费.
那么动态转移方程式为:
if(i == j) dp[i][j] = max(dp[i - 1][j - 1], abs(a[i] - b[j]) + abs(p - b[j]))
else if(j > i) dp[i][j] = min(dp[i][j - 1], max(dp[i - 1][j - 1], abs(a[i] - b[j]) + abs(p - b[j])))
代码:
1 #include <iostream> 2 #include <algorithm> 3 #include <stdio.h> 4 using namespace std; 5 6 const int MAXN = 1e3 + 10; 7 int a[MAXN], b[MAXN << 1], dp[MAXN][MAXN << 1];//dp[i][j]存储前i个人在前j把钥匙中每个人得到钥匙的最小花费 8 9 int main(void){ 10 int n, k, p; 11 scanf("%d%d%d", &n, &k, &p); 12 for(int i = 1; i <= n; i++){ 13 scanf("%d", &a[i]); 14 } 15 for(int i = 1; i <= k; i++){ 16 scanf("%d", &b[i]); 17 } 18 sort(a + 1, a + n + 1); 19 sort(b + 1, b + k + 1); 20 for(int i = 1; i <= n; i++){ 21 for(int j = i; j <= k; j++){ 22 if(i == j) dp[i][j] = max(dp[i - 1][j - 1], abs(b[j] - a[i]) + abs(p - b[j])); 23 else dp[i][j] = min(dp[i][j - 1], max(dp[i - 1][j - 1], abs(b[j] - a[i]) + abs(p - b[j]))); 24 } 25 } 26 int sol = 2e9 + 10; 27 for(int i = n; i <= k; i++){ 28 sol = min(sol, dp[n][i]); 29 } 30 printf("%d\n", sol); 31 return 0; 32 }
View Code
转载于:https://www.cnblogs.com/geloutingyu/p/7181935.html
cf831D(dp)相关推荐
- dp,sp,px相互转化
方法一: public int sp2px(float sp) {return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, ...
- [JS][dp]题解 | #打家劫舍(一)#
题解 | #打家劫舍(一)# 题目链接 打家劫舍(一) 题目描述 描述 你是一个经验丰富的小偷,准备偷沿街的一排房间,每个房间都存有一定的现金,为了防止被发现,你不能偷相邻的两家,即,如果偷了第一家, ...
- HDU 2084 数塔(DP)(JAVA版)
数塔 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- dp cf 20190615
A. Timofey and a tree 这个不算是dp,就是一个思维题,好难想的思维题,看了题解才写出来的, 把点和边分开,如果一条边的两个点颜色不同就是特殊边,特殊边两边连的点就叫特殊点, 如果 ...
- BZOJ 1003[ZJOI2006]物流运输(SPFA+DP)
Problem 1003. -- [ZJOI2006]物流运输 1003: [ZJOI2006]物流运输 Time Limit: 10 Sec Memory Limit: 162 MB Submit ...
- [NOI2005]聪聪与可可(期望dp)
题意:给一张无向图,有一只猫和一只老鼠,猫每秒会向老鼠的方向移动两个单位,若它们的距离为一,那么只会移动一个单位,老鼠会等概率向周围移动一步或不动,求猫抓到老鼠的期望时间. Solution luog ...
- Codeforces 903F Clear The Matrix(状态压缩DP)
题目链接 Clear The Matrix 题意 给定一个$4 * n$的矩形,里面的元素为$'.'$或$'*'$.现在有$4$种正方形可以覆盖掉$'*'$,正方形的边长分别为$1,2,3,4$. 求 ...
- 喵哈哈村的魔法考试 Round #1 (Div.2) 题解源码(A.水+暴力,B.dp+栈)
A.喵哈哈村的魔法石 发布时间: 2017年2月21日 20:05 最后更新: 2017年2月21日 20:06 时间限制: 1000ms 内存限制: 128M 描述 传说喵哈哈村有三种神 ...
- 尼克的任务 dp 洛谷1280
蒟蒻表示老久没看过dp题目了,,挺水的一道dp题目都没想出来,,, 首先设dp[i]表示从开始到i时间的最大空闲时间,用vector to[x] 表示从x点开始的任务结束时间,cnt[x]表示从x开始 ...
最新文章
- P1066 2^k进制数 NOIP 2006 提高组 第四题
- ps背景不变换字_分享五个超级实用的PS小技巧
- android 图片绑定按钮,Android编程实现给Button添加图片和文字的方法
- fatal error: hdf5.h: No such file or directory
- css线加点的进度,纯CSS实现的交互式进度条(点击带进度填充动画)
- jmeter生成html报告修改,Jmeter生成html报告(示例代码)
- 多文件管理器 tablacus explorer 下载与安装
- Python中lambda的使用,与它的三个好基友介绍!
- Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发(转发同上)...
- list 集合 分页 三种实现方式,include jdk8 --stream
- laravel插入数据时报 502 Bad Gateway
- Echarts多条折线图 y轴数值与实际值不符解决方法
- servlet的配置(映射)以及生命周期
- C4D快速入门教程——创建模型
- c语言spoc测验成绩比重,SPOC混合教学模式在C语言程序设计课程的应用
- .NET Standard中配置TargetFrameworks输出多版本类库
- Codeforces869 E. The Untended Antiquity (随机化算法)
- 算法分析----基础知识点
- Diagnosing OSGi uses conflicts
- Linux下C++使用Protobuf的安装步骤(vscode)