cf 830A Office Keys 【二分+贪心】
2017-07-15 09:24
267 查看
点击打开链接
题意:
给你n个人和k把钥匙分别在某个位置,然后每个钥匙只能被一个人拥有,且都额能打开最后的门,
问你所有人都到达终点所用的最短时间。
题解:
这题只能贪心了,,,
把所有人的位置以及钥匙的位置全部sort一遍,
sort后,前一个人去的钥匙位置一定在后一个人取得钥匙前面,否则产生交叉肯定多浪费时间。
二分最长时间,从左向右验证 182ms。
or然后依次从一边向另一边dp,do[i][j]表示 前j个人用前i把钥匙到达终点的最长时间。
so i==j 时, 该把钥匙一定要拿上。 dp[i][j]=max(dp[i-1][j-1],abs(a[j]-key[i])+abs(p-key[i]));
else 求最小值。 dp[i][j]=min(dp[i-1][j],max(dp[i-1][j-1],abs(a[j]-key[i])+abs(p-key[i])));
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=2020;
int n,k,p;
int dp[maxn][maxn];
int a[maxn],key[maxn];
int main(){
scanf("%d %d %d",&n,&k,&p);
for(int i=1;i<=n;++i)
scanf("%d",&a[i]);
for(int i=1;i<=k;++i)
scanf("%d",&key[i]);
sort(a+1,a+1+n);
sort(key+1,key+1+k);
memset(dp,0,sizeof(dp));
for(int i=1;i<=k;++i){
for(int j=1;j<=n;++j){
if(i==j)
dp[i][j]=max(dp[i-1][j-1],abs(a[j]-key[i])+abs(p-key[i]));
else
dp[i][j]=min(dp[i-1][j],max(dp[i-1][j-1],abs(a[j]-key[i])+abs(p-key[i])));
}
}
printf("%d",dp[k]
);
return 0;
}
题意:
给你n个人和k把钥匙分别在某个位置,然后每个钥匙只能被一个人拥有,且都额能打开最后的门,
问你所有人都到达终点所用的最短时间。
题解:
这题只能贪心了,,,
把所有人的位置以及钥匙的位置全部sort一遍,
sort后,前一个人去的钥匙位置一定在后一个人取得钥匙前面,否则产生交叉肯定多浪费时间。
二分最长时间,从左向右验证 182ms。
or然后依次从一边向另一边dp,do[i][j]表示 前j个人用前i把钥匙到达终点的最长时间。
so i==j 时, 该把钥匙一定要拿上。 dp[i][j]=max(dp[i-1][j-1],abs(a[j]-key[i])+abs(p-key[i]));
else 求最小值。 dp[i][j]=min(dp[i-1][j],max(dp[i-1][j-1],abs(a[j]-key[i])+abs(p-key[i])));
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=2020;
int n,k,p;
int dp[maxn][maxn];
int a[maxn],key[maxn];
int main(){
scanf("%d %d %d",&n,&k,&p);
for(int i=1;i<=n;++i)
scanf("%d",&a[i]);
for(int i=1;i<=k;++i)
scanf("%d",&key[i]);
sort(a+1,a+1+n);
sort(key+1,key+1+k);
memset(dp,0,sizeof(dp));
for(int i=1;i<=k;++i){
for(int j=1;j<=n;++j){
if(i==j)
dp[i][j]=max(dp[i-1][j-1],abs(a[j]-key[i])+abs(p-key[i]));
else
dp[i][j]=min(dp[i-1][j],max(dp[i-1][j-1],abs(a[j]-key[i])+abs(p-key[i])));
}
}
printf("%d",dp[k]
);
return 0;
}
相关文章推荐
- 【Codeforces Round 339 (Div 2)D】【暴力 贪心 二分】Skills 最高技能人数乘cm+最低技能乘cf权值最大
- CFcontest377-D 贪心,二分
- CF 830A 贪心+二分
- CF_604B(二分+贪心)
- CF 363D. Renting Bikes 贪心+二分
- CF 779D String Game 二分,贪心匹配字符串
- cf 484B 二分+贪心
- CF - 803D. Magazine Ad - 二分+贪心
- CF 329B(Biridian Forest-贪心-非二分)
- 【打CF,学算法——三星级】CodeForces 645C Enduring Exodus (二分+贪心)
- CF 329B(Biridian Forest-贪心-非二分)
- CF 589F 贪心+二分
- uvalive 3971 - Assemble(二分搜索 + 贪心)
- Codeforces 363D Renting Bikes【二分+贪心】
- hdu 4004 The Frog's Games (二分搜索 + 贪心)
- Codeforces Round #398 D题Cartons of milk(二分,贪心)解题报告
- HUNAN 11560 Yangyang loves AC(二分+贪心)
- Codeforecs 493C Vasya and Basketball 贪心+二分
- BZOJ 2525 Poi2011 Dynamite 二分答案+树形贪心
- CF - 779D. String Game 二分