用二分可以簡單解決的題

2021-07-09 01:50:52 字數 868 閱讀 5260

二分,字面上的意思,將乙個問題分為兩個變簡的子問題,從而使問題變得簡化

引入:最大化平均值

有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

好了,看看部分**:

二分部分

double l = 0.5, r = 1; 

for(int i = 0; i < 100; i++)

我們用迴圈次數作為終止條件,可以這麼想一次二分將範圍縮小一半,100次之後精度範圍就變成了10^(-31),這樣子就不用擔心的答案有誤了。

double judje(double x)

sort(y, y+n);

double

sum = 0;

for(int i = 0; i < k; i++)

return

sum >= 0;

}

v[i] - x*w[i]是在假設平均重量價值為x時,此物品所多餘的價值。

然後就排序貪心一下就好了^^

此方法的題: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...