算法学习-二分搜索二分答案2

二分答案


一、前言

顾名思义,二分答案就是用二分查找的思路去找答案,下面通过举例来说明。

二、实现思路:

题目:P1873 砍树

砍下树木的高度 h 从 0 一直到所有树木中最高的高度 hmax 依次递增,我们可以此为依据进行二分搜索得出答案。

三、代码

#include<iostream>
using namespace std;

long long n,m,arr[1000005],a,b,i,mid,H,hmax;
long long Len(int h);

int main()
{
    cin>>n>>m;

    for(i=0;i<n;++i)
    {
        cin>>arr[i];
        if(arr[i]>hmax) hmax=arr[i];//输入并找出最大高度
    }

    a=0;
    b=hmax;
    while(a<=b)//搜索最大的获得木头长度
    {
        mid=(a+b)/2;
        if( (H=Len(mid))>=m ) a=mid+1;
        else b=mid-1;
    }

    cout<<b;

    return 0;
}

long long Len(int h)//计算长度的函数
{
    long long sum=0;
    for(i=0;i<n;++i)
    {
        if(arr[i]>h)
            sum+=arr[i]-h;
    }
    return sum;
}

没了

最后

不开心

posted @ 2020-11-15 23:10  七铭的魔法师  阅读(80)  评论(0)    收藏  举报