二分,字面上的意思,將乙個問題分為兩個變簡的子問題,從而使問題變得簡化
引入:最大化平均值
有n個物品的重量和價值分別是wi和vi。從中選出k個物品使得單位重量的價值最大。。。
向這些題,通常可以使用二分搜尋法就可以解決了。
設:c(x) = 可以選擇使得單位重量的價值不小於x
那麼問題可以變成求滿足c(x)的最大x
這樣的話,我們就要去找 x 的範圍
若輸入為n = 3 k = 2 (w, v) =
(2, 2) 單位重量的價值為2/2=1;
(5, 3) 單位重量的價值為3/5=0.6;
(2, 1) 單位重量的價值為1/2=0.5;
最後我們就知道了x的範圍0.5~1
好了,看看部分**:
二分部分
我們用迴圈次數作為終止條件,可以這麼想一次二分將範圍縮小一半,100次之後精度範圍就變成了10^(-31),這樣子就不用擔心的答案有誤了。double l = 0.5, r = 1;
for(int i = 0; i < 100; i++)
v[i] - x*w[i]是在假設平均重量價值為x時,此物品所多餘的價值。double judje(double x)
sort(y, y+n);
double
sum = 0;
for(int i = 0; i < k; i++)
return
sum >= 0;
}
然後就排序貪心一下就好了^^
此方法的題:poj(1064)poj(2456)
若有錯,請指導
二分查詢簡單題
leetcode 35.search insert position 最普通的binary search,若target存在,則返回所在下標 若target不存在,則返回target待插入的位置,本質上就是實現lower bound函式 無論mid left right left 2,還是mid l...
二分答案 簡單題
一 何時可以使用 二分答案 不是任何題目都適合使用 二分答案 的,我sam觀察到一般有以下的一些特徵 a.候選答案必須是離散的 且已知答案的範圍是 最小值min,最大值max 連續區間上不能進行二分操作 例如,在題目 kth largest 第k大的數 中 答案是閉區間 a 1 b 1 a n b ...
二分 簡單題多解法
題目 輸入n n 100,000 個整數,找出其中的兩個數,它們之和等於 整數m 假定肯定有解 題中所有整數都能用 int 解法1 用兩重迴圈,列舉所有的取數方法,複雜度是o n 2 的。for int i 0 i n 1 i for int j i 1 j n j if a i a j m bre...