最小值最大化问题(贪心系列)
2014-11-07 18:20
330 查看
疯牛
时间限制:1000 ms | 内存限制:65535 KB难度:4
描述农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小隔间依次编号为x1,...,xN (0 <= xi <= 1,000,000,000).
但是,John的C (2 <= C <= N)头牛们并不喜欢这种布局,而且几头牛放在一个隔间里,他们就要发生争斗。为了不让牛互相伤害。John决定自己给牛分配隔间,使任意两头牛之间的最小距离尽可能的大,那么,这个最大的最小距离是什么呢?
输入有多组测试数据,以EOF结束。
第一行:空格分隔的两个整数N和C
第二行——第N+1行:分别指出了xi的位置
输出每组测试数据输出一个整数,满足题意的最大的最小值,注意换行。
样例输入
5 3 1 2 8 4 9
样例输出
3
来源POJ 翻译
上传者TC_张友谊
最大化最小值问题或者最小值最大化问题
算法思路:二分+贪心
思路:a.对牛牛进行排序 b.把第一头牛放入x0 c.如果第i头牛放入了x 如果niu《k就放得下
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; int a[100005]; int n,c; int ok(int k) { int cnt=1; int tmp=a[0]; for(int i=1;i<n;i++) { if(a[i]-tmp>=k) { tmp=a[i]; cnt++; if(cnt>=c)//装下c头牛 return true; } } return false; } int main() { while(~scanf("%d%d",&n,&c)) { for(int i=0;i<n;i++) { scanf("%d",&a[i]); } sort(a,a+n); /*二分查找*/ int l=0,r=a[n-1]; int mid; while(l<=r) { mid=(l+r)/2; if(ok(mid)) l=mid+1; else r=mid-1; } printf("%d\n",r); } }
相关文章推荐
- uva 10020 Minimal coverage(贪心-最小覆盖问题)
- POJ 2976 Dropping tests 0/1分数规划问题 最大化平均值 贪心+二分
- 动态规划问题系列---Minimum Path Sum(路线上元素和的最小值)
- poj 3258 River Hopscotch (最小值最大化 二分+贪心)
- River Hopscotch poj3258 (二分+贪心思想+最小值最大化)
- 数学建模常用Matlab/Lingo/c代码总结系列——最小费用最大流问题
- 字典序最小问题-贪心-Best Cow Line-POJ3617
- poj3258 二分 最小值最大化问题
- CodeForces 645C(最大化最小值问题)
- Aggressive cows(最大化最小值问题(二分搜索))
- nyoj 610 定长覆盖 && 贪心问题系列
- 步步为营(六)贪心(5)最小区间覆盖问题
- 字典序最小问题 前后删除加入 贪心poj3617
- ACM知识点 之 贪心(5)最小区间覆盖问题
- 字典序最小问题 (贪心)
- (Relax 贪心1.4)POJ 2325 Persistent Numbers(使用贪心策略解决这么一个问题: 给定一个数n,求一个最小的数m,使得m的各位的乘积==n)
- 【二分答案+贪心】解决“最小值最大”问题(UVa 12124 - Assemble)
- nyoj+贪心过河问题+借助于最轻的两个让最胖的过去花费最小。
- poj 2456 Aggressive cows (最小值最大化二分问题)
- 贪心——区间覆盖问题之区间完全覆盖最小区间数