poj3273(二分)詳細題解

2021-10-05 01:33:14 字數 951 閱讀 2561

感謝大佬的文章提供的思路,這道題理解起來有點難

沒有思路的話,看看著兩篇部落格挺有思路的

/*

大致題意:連續的資料分成m組 求最小組裡面的最大值(比如很多組中有兩個只有乙個資料的組 那麼誰大就是答案)

本質上是列舉 這裡的二分只是減小列舉的次數 好接下來看**

如何的得出答案:列舉乙個數 是否符合分成m組 根據計算得到的具體組和m的差距 在對邊界進行調整

假設mid為我們的正確答案 好好記住後面有用。。

*/#include

using

namespace std;

const

int n =

100010

;//因為n<=100000

int a[n]

;int n, m;

bool

er_fen

(int mid)}if

(cnt > m)

return

true

;//若求得的組數比m大 說明mid太小了才會導致頻繁的分組 在後面的二分中改變左端

else

return

false

;/*此時的cnt很可能等於m所以右端改變為mid 對答案再進行優化

或者小於m,也會將正確答案放在邊界內,繼續窮舉優化

做個有意思的假設:假設(假設!!!)第一次mid就為我們的正確答案,則右邊界一直等於答案直到二分結束輸出*/

}int

main()

int left = low;

int right = sum;

while

(left < right)

//本題的答案一定出現在最大值和總和之間

cout << left << endl;

}

poj 3273 二分列舉

題意 給出乙個有n個資料的陣列,將其分為連續的m份,找到一種分法,是的m份中最大乙份總和最小 參考部落格 題解 一種方案中最大的那部分總和num存在乙個範圍,num總大於等於陣列中最大的那個數,總小於等於整個陣列的和。得到了乙個範圍a b,用二分法不斷縮小範圍,比如第一次取mid a a b 2,那...

POJ 3273(二分,最小化最大值)

和這道題一樣了 description 聰哥在暑假參加了打零工的活動,這個活動分為n個工作日,每個工作日的工資為vi。有m個結算工錢的時間,聰哥可以自由安排這些時間,也就是說什麼時候拿錢,老闆說的不算,聰哥才有發言權!因為聰哥是土豪,他是老闆的老闆 聰哥不喜歡身上一次性有太多的錢,於是他想安排一下拿...

poj3273 poj3258 二分答案

二分答案的方法比較常用,思想比較簡單,就是從結果出發解決問題,已知答案在某乙個區間中,並且根據某種判定條件,能夠確定當前所選的值是大了還是小了,我們通過二分的方法將其找出來,從而降低時間複雜度。當然,這個判定條件就是二分答案的關鍵啦。通常,判定函式是乙個貪心演算法。二分答案的方法通常用來解決最小值最...