算法学习-二分搜索二分答案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;
}
没了
最后
不开心

浙公网安备 33010602011771号