二分答案演算法定中間的二分mid值為什么不談的題目會變呢,有時候是mid=(L+R)/2,有時候是mid=(L+R+1)/2;
有什么好的方法可以很好理解這個邊界呢?或者有沒有更好的模板
我使用的模板是這樣的:
求最大值:
void solve(){
int l=0,r=MAXN;
for(int i=0;i<100;i++){
int mid = (r+l+1)/2;//這個地方到底怎么確定
if(check(mid)){
l=mid;
}else{
r=mid-1;
}
}
cout<<r<<endl;
}求最小值:
void solve(){
int lb=0,rb=maxn;
for(int i=0;i<100;i++){
int mid=(lb+rb+1)/2;//這個地方到底怎么確定
if(check(mid)){
rb=mid;
}else{
lb=mid+1;
}
}
cout<<lb<<endl;
}轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/155521.html
標籤:C++ 語言
上一篇:想問一下這個程式為什么無法運行
