1. 程式人生 > >新技能——二分答案

新技能——二分答案

本來在刷圖論裡的題的,結果不小心遇到了這道luogu1462
想了好久也沒做出來,只有看題解了(怪我咯,略略略);
好吧,這題要用二分;
1.二分思想
其實和數學中的是一樣的,對於一個單調函式,可以通過二分法來提高效率,從而更快的確定答案的範圍(或值);
(對於有單峰的函式,我們可以通過三分法來解決問題;)
2.二分答案
二分答案,就是對答案進行二分;像這樣:

    while(l<=r)
    {
        int mid=l+r>>1;
        if(check(mid)) r=mid-1;
        else l=mid+1;
    }

l到r就是答案的區間範圍,而check函式就自己寫了;
如開頭那道題,check函式就是損失血的最小值小於他的血量;
如果還不理解可以查查二分查詢,
或者想想讓你猜數字(1到1000000),然後告訴你這個數與答案的大小關係,你要猜幾次?(可以每一個都試一下,但如果二分是不是簡單多了?)
上一些 利提 :
noip2015 跳石頭
luogu1024