【dp】codeforces 830-A Office Keys
2017-07-27 19:56
597 查看
Link:http://codeforces.com/problemset/problem/830/A
#include <bits/stdc++.h> using namespace std; /* 830-A Office Keys 题意:n个人,k把钥匙,每个人需要找到一把钥匙,同时行动到办公室, 求所有人都到最少需要的时间。 题解:贪心想一下,如果最右边的人取了最右边的钥匙,是否其他人取这个钥匙更好。 我们知道其实最右边的人取的钥匙的位置,一定在他左边的人取的钥匙的位置的右边。 那么我们需要排序下,再动规下,dp[i][j]代表前i个取范围1-j钥匙的最少花费时间。 */ const double PI = acos(-1.0); const double eps = 1e-6; const int INF=0x3f3f3f3f; const int N=2010; const int mod = 1e9+7; int a ,b ; int dp ; int main() { int n,m,p; scanf("%d%d%d",&n,&m,&p); for(int i = 0; i < n; i++) scanf("%d",&a[i]); sort(a,a+n); for(int i = 0; i < m; i++) scanf("%d",&b[i]); sort(b,b+m); for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) dp[i][j] = INF*2; for(int i = 0; i < n; i++) { for(int j = i; j < m; j++) { if(i == 0){ dp[i][j] = abs(a[i]-b[j])+abs(b[j]-p); if(j != 0) dp[i][j] = min(dp[i][j],dp[i][j-1]); } else{ dp[i][j] = min(dp[i][j-1],max(dp[i-1][j-1],abs(a[i]-b[j])+abs(b[j]-p))); } //printf("%d %d: %d\n",i,j,dp[i][j]); } } printf("%d\n",dp[n-1][m-1]); return 0; }
相关文章推荐
- codeforces 831 D Office Keys(dp)
- Codeforces Round #424 (Div. 2) D. Office Keys(dp)
- Codeforces Round #424 (Div. 2) D. Office Keys(dp)
- Codeforces Round #424 (Div. 2) D. Office Keys(贪心 二分 or DP)
- CF Round #424( Div.2) D. Office Keys 【二分||DP】
- Codeforces - 831D. Office Keys - dp、二分+贪心
- Codeforces Round #424 -(二分&贪心)||dp-D. Office Keys
- Codeforces 831 D Office Keys
- Codeforces VK Cup Finals #424 Div.1 A. Office Keys(DP)
- codeforces 264B Good Sequences(DP+灵活思维)【最长不互质序列模板】
- 【DP】 codeforces 487B Strip
- 【Codeforces】Codeforces Round #374 (Div. 2) -- C. Journey (DP)
- Codeforces 455A Boredom 取数字的dp
- CodeForces - 660F:Bear and Bowling 4(DP+斜率优化)
- codeforces 590D Top Secret Task(dp)
- CodeForces 414 B.Mashmokh and ACM(dp)
- codeforces 543A Writing Code (dp)
- CodeForces 518 D.Ilya and Escalator(概率DP)
- codeforces 788A Functions again(dp之最大子段和)【模板】
- Codeforces 628D. Magic Numbers 数位DP