二分問題 挑戰例題 2017 7 28

2022-01-28 17:55:13 字數 2121 閱讀 5163

題意:

給出n條線段,以公尺的單位給出,小數點後兩位(精確到厘公尺),要你對這些線段裁剪,裁剪出m條等長的線段,並且讓這些線段盡可能長另外線段的長度不能小於1厘公尺,如果籌不夠m條,輸出0.00

思路:1.轉換成整數 接著套模板就可以了

2.check函式 裡如果sum >= k說明此時可以拆分成k個  然後把區間右移 找更大的

#include #include 

#include

using

namespace

std;

const

int mod = 1e9 + 7

;const

int maxn = 10000 + 5

;const

int inf = 0x3f3f3f3f

;const

double eps = 1e-7

;typedef

long

long

ll;int

a[maxn];

intn,k;

double

len;

bool check(int

d)

return sum >=k;

}int

main ()

int ans = 0

;

int le = 1,ri = max; //

因為已經規劃成整數問題了 所以開始就是1如果是0 會崩潰

while (le <=ri)

printf(

"%.2f\n

",(double) ans/100.0

); }

return0;

}

尋找可行解_未test

//double型別還不熟練 

#include #include 

#include

using

namespace

std;

const

int mod = 1e9 + 7

;const

int maxn = 10000 + 5

;const

int inf = 0x3f3f3f3f

;const

double eps = 1e-3

;typedef

long

long

ll;double

a[maxn];

intn,k;

bool check(double

d)

return sum >=k;

}int

main()

printf(

"%.2f\n

",floor (ans*100)/100

); }

return0;

}

未test_可能會有精度問題

題意:有n個物品的重量和價值分別是wi 和 vi。從中選出k個物品使得單位重量的價值最大

思路:書上有思路  //利用單位價值貪心 不對的

#include //

最大化平均值

#include #include

using

namespace

std;

const

int mod = 1e9 + 7

;const

int maxn = 10000 + 5

;const

int inf = 0x3f3f3f3f

;typedef

long

long

ll;int

n,k;

intw[maxn],v[maxn];

double

s[maxn];

bool check (double

d) sort(s,s+n);

double sum = 0

;

for(int i=0; i)

return sum >= 0;}

intmain()

printf(

"%.2f\n

",ans);

}return0;

}

最大化平均值

二分總結 挑戰

最後實在不知道輸出mid left 還是right,就把mid mid 1 mid 1根據特定的順序都判斷一遍就不會出錯。普通的二分。1 切小木棍 最經典的就是從n個小木棍裡面切除k個最長的,求出最長的長度。題目鏈結 有兩種寫法,一種是取mid100次,另一種是卡r l 1e9等,但是不要卡的太小,...

數學問題 二分求冪例題

例 4.10 人見人愛 a b 題目描述 求 a b 的最後三位數表示的整數。說明 a b 的含義是 a 的 b 次方 輸入 輸入資料報含多個測試例項,每個例項佔一行,由兩個正整數 a 和 b 組成 如果 a 0,b 0,則表示輸入資料的結束,不做處理。輸出 對於每個測試例項,請輸出 a b 的最後...

二分模板以及經典例題

演算法思路 演算法思路 假設目標值在閉區間 l,r 中,每次將區間長度縮小一半,當l r時,我們就找到了目標值。當我們將區間 l,r 劃分成 l,mid 和 mid 1,r 時,其更新操作是r mid或者l mid 1 計算mid時不需要加1。int bsearch 1 int l,int r re...