poj3258 题目  (最大化最小值)(最小值最大化)

题意:牛要到河对岸,在与河岸垂直的一条线上,河中有N块石头,给定河岸宽度L,以及每一块石头离牛所在河岸的距离,现在去掉M块石头,要求去掉M块石头后,剩下的石头之间以及石头与河岸的最小距离的最大值

此题要求最短距离最大,对于最短距离我们知道其范围是1~L,那么可以在该单调区间内进行二分查找不断缩小范围。

那么还需要一个判断函数judge来判断当前距离作为最短距离是否是可行解。如果是可行解,但有可能它不是最优解,那么因为求最大值我们还需要继续向其右部区间查找是否有更优解;如果不是可行解,那么可行解只可能在其左部区间,二分向左部查找。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int Max = 5e4+5;
int L,N,M;
int dis[Max];
/*
要求去掉M块石头后,剩下的石头之
间以及石头与河岸的最小距离的最大值。
*/
int cmp(int a,int b)
{
return a<b;
}
int Bsearch(int l,int r,int k)
{
int mid,last,cnt;
while(l<=r)
{
mid=(l+r)>>1;
last = cnt = 0;
for(int i=1;i<=N+1;i++)
if(mid>=dis[i]-dis[last]) cnt++;
else last = i;
if(cnt>k) r = mid-1;
else l = mid+1;
}
return l;
}
int main()
{
cin>>L>>N>>M;
dis[0]=0;
dis[N+1]=L;
for(int i=1;i<=N;i++)
cin>>dis[i];
sort(dis+1,dis+N+1,cmp);
int ans = Bsearch(0,L,M);
cout<<ans<<endl;
return 0;
}

poj 3273 题目(最小化最大值)(最大值最小化)

#include<stdio.h>
#include<iostream>
#include <algorithm>
#include<math.h>
using namespace std;
const int Max_N=1e5+5;
const int INF = 0x3f3f3f3f;
int N,M;
int day[Max_N]; bool C(int mon)
{
int sum=0,cnt=0;
for(int i=0;i<N;i++)
{
if(day[i]>mon) return false;
if(sum+day[i]<=mon) sum+=day[i];
else {
sum=day[i];
cnt++;
}
}
cnt++;
return cnt<=M;
} void solve()
{
int l=0,r=INF;
while(r-l>1)
{
int mid = (r+l) >> 1;
if(C(mid)) r= mid;
else l = mid;
}
printf("%d\n",r);
}
int main()
{
scanf("%d%d",&N,&M);
for(int i=0;i<N;i++)
scanf("%d",&day[i]);
solve(); return 0;
}

poj 3258 3273的更多相关文章

  1. POJ 3122 & 3258 & 3273 #二分

    以下三道都是经典二分,道理都差不多,代码就贴在一起了. POJ 3122    POJ 3258    POJ 3273 POJ 3122: #include<iostream> #inc ...

  2. POJ 2456 3258 3273 3104 3045(二分搜索-最大化最小值)

    POJ 2456 题意 农夫约翰有N间牛舍排在一条直线上,第i号牛舍在xi的位置,其中有C头牛对牛舍不满意,因此经常相互攻击.需要将这C头牛放在离其他牛尽可能远的牛舍,也就是求最大化最近两头牛之间的距 ...

  3. poj 3258 River Hopscotch 题解

    [题意] 牛要到河对岸,在与河岸垂直的一条线上,河中有N块石头,给定河岸宽度L,以及每一块石头离牛所在河岸的距离, 现在去掉M块石头,要求去掉M块石头后,剩下的石头之间以及石头与河岸的最小距离的最大值 ...

  4. 二分搜索 POJ 3258 River Hopscotch

    题目传送门 /* 二分:搜索距离,判断时距离小于d的石头拿掉 */ #include <cstdio> #include <algorithm> #include <cs ...

  5. E - River Hopscotch POJ - 3258(二分)

    E - River Hopscotch POJ - 3258 Every year the cows hold an event featuring a peculiar version of hop ...

  6. poj 3258 River Hopscotch(二分+贪心)

    题目:http://poj.org/problem?id=3258 题意: 一条河长度为 L,河的起点(Start)和终点(End)分别有2块石头,S到E的距离就是L. 河中有n块石头,每块石头到S都 ...

  7. POJ 3258 River Hopscotch 二分枚举

    题目:http://poj.org/problem?id=3258 又A一道,睡觉去了.. #include <stdio.h> #include <algorithm> ]; ...

  8. poj 3258 River Hopscotch 【二分】

    题目真是不好读,大意例如以下(知道题意就非常好解了) 大致题意: 一条河长度为 L,河的起点(Start)和终点(End)分别有2块石头,S到E的距离就是L. 河中有n块石头,每块石头到S都有唯一的距 ...

  9. POJ 3258(二分求最大化最小值)

    题目链接:http://poj.org/problem?id=3258 题目大意是求删除哪M块石头之后似的石头之间的最短距离最大. 这道题目感觉大致代码写起来不算困难,难点在于边界处理上.我思考边界思 ...

随机推荐

  1. ParseCrontab类,解析时间规则

    <?php /** * Created by PhpStorm. * User: ClownFish 187231450@qq.com * Date: 14-12-27 * Time: 上午11 ...

  2. codeforces round#510

    蒟蒻和以前一样还是只能做 $4$ 题, 希望有一天可以 水到 $5$ 题!! 不过也终于上了蓝了...   A. Benches Description 给出$N$个座位, 每个座位上初始有$a_i$ ...

  3. swift 要点

    swift 基本语法注意点 通常来说,编程语言教程中的第一个程序应该在屏幕上打印“Hello, world”.在 Swift 中,可以用一行代码实现 print("Hello, world! ...

  4. Ubuntu安装bcmath扩展

    sudo apt-get install php-bcmath

  5. js,jquery的数字型字符串变量比较大小

    转:http://blog.csdn.net/dxnn520/article/details/8267173 var定义的变量应该是字符串,有时没有经过类型转换而进行比较的话,小于十的话还可以,如果大 ...

  6. python轻量级orm

    python下的orm使用SQLAlchemy比较多,用了一段时间感觉不顺手,主要问题是SQLAlchemy太重,所以自己写了一个orm,实现方式和netsharp类似,oql部分因为代码比较多,没有 ...

  7. QueryRunner类的八种结果处理集

    package cn.jy.demo; import java.sql.Connection; import java.sql.SQLException; import java.util.List; ...

  8. mysql Error_code: 1593

    mysql slave_IO_running no  查看data目录下的.err文件提示:mysql  Error_code: 1593 解决方法: 1.检查 data目录下auto.cnf 文件中 ...

  9. java面试感悟【一】

    我最终选择不包装工作经验,或许是因为我怂,或许是因为一些莫名其妙的坚持…… 然而结果就是在boss上沟通了20多家,只有7家让我投了简历,1家跟我说要我发个时间段给他稍后告诉我面试时间,然后就没有然后 ...

  10. web.xml 详细介绍(zz)

    web.xml 详细介绍 博客分类: CoreJava WebXMLServletJSPTomcat  http://mianhuaman.iteye.com/blog/1105522 1.启动一个W ...