poj3273 poj3258 二分答案

2021-06-27 14:18:06 字數 759 閱讀 1535

二分答案的方法比較常用,思想比較簡單,就是從結果出發解決問題,已知答案在某乙個區間中,並且根據某種判定條件,能夠確定當前所選的值是大了還是小了,我們通過二分的方法將其找出來,從而降低時間複雜度。當然,這個判定條件就是二分答案的關鍵啦。通常,判定函式是乙個貪心演算法。二分答案的方法通常用來解決最小值最大或最大值最小等問題。今晚做了兩個簡單的二分答案的題目,乙個是求最小值最大,乙個是求最大值最小,它們在二分的時候略有不同:當求最大值最小時,我們判定當前值如果符合條件,應該選取前半個區間,此時注意求mid的時候應該是向下取整的,不然就會陷入死迴圈,當求最小值最大時,我們判定當前值如果符合條件,應該選取後半個區間,此時注意求mid時應該向上取整,具體看**吧。

poj3273最大值最小問題;

#include#include#include#include#define max 1000000

using namespace std;

int a[max],n,m;

bool isf(int x)

else }

if (cnt > m) return false;

return true; }

int main()

else

} if (cnt > m) return false;

return true;

}int main()

else

} printf("%d\n",l);

}return 0;

}

poj3273 poj3258 二分易錯點

1.關於二分的兩種寫法 一種是 while leftif left mid 1 else right mid ans left 這是我比較喜歡的一種 還有一種是while left right if left mid 1 else right mid 1 ans mid 注意兩種的ans是不同的 2...

poj解題報告 3273

給出乙個大小為n的陣列,將其分為m塊,讓每塊數字之和的最大值盡量小。右邊界是將整個陣列當做一塊,那麼最大值就是所有數字之和 左邊界是將整個陣列分成n塊,那麼和的最大值就是陣列元素中的最大值。其實,當給出乙個答案後,從陣列首元素開始疊加,超出答案那麼分塊數加1,這麼遍歷一遍後,要是分塊數小於m,說明答...

poj解題報告 3258

題意 一些石頭排成一條線,第乙個和最後乙個不能去掉,其餘的共可以去掉m塊,要使去掉後石頭間距的最小值最大。這種數學題理解起來真不容易,不過想好了演算法就好做了。如下 include includeint a 50005 int b 50005 int cmp const void a,const v...