UVALive 3971 組裝電腦

2021-07-27 16:46:56 字數 2178 閱讀 6139

/**

你有b元錢,想要組裝一台電腦。給出n個配件的種類、品質因子,和**,

每種型別的配件各買乙個,總價不超過b,求配件最小品質因子的最大值。

sample input

118 800

processor 3500_mhz 66 5

processor 4200_mhz 103 7

processor 5000_mhz 156 9

processor 6000_mhz 219 12

memory 1_gb 35 3

memory 2_gb 88 6

memory 4_gb 170 12

mainbord all_onboard 52 10

harddisk 250_gb 54 10

harddisk 500_fb 99 12

casing midi 36 10

monitor 17_inch 157 5

monitor 19_inch 175 7

monitor 20_inch 210 9

monitor 22_inch 293 12

mouse cordless_optical 18 12

mouse microsoft 30 9

keyboard office 4 10

sample output

9找最大值,二分,假設答案為x

排除品質因子小於x的所有配件,如果能組裝出一台電腦,則ans >= x else ans < x;*/

#include #include #include #include #include using namespace std;

struct aa

};mapid;

vector c[1010];

int cnt = 0;

int n, b;

int id(string s) //將map裡面的對應關係提取出來

bool check(int q)

if(mi == b + 1) return 0;

sum += mi;

if(sum > b) return 0;

}return 1;

}int main()

int l = 0, r = maxn;

while(l < r)

cout << l << endl;}}

return 0;

}

關於二分的一點總結:

浮點數轉換當然是l = mid 或 r = mid,結束條件是 r - l < esp;

整數的時候mid 有兩種取法:左中 (l + r) / 2,右中 (l + r + 1) / 2,c++stl中的

例如: l = 2,r = 3; mid 採用上面兩種分別可以取到2,3;

如果轉換是 l = mid + 1,r = mid-1;那上述兩種方式都可以

如果轉換是 l = mid; r = mid - 1;

例如我們要求滿足不等式 x^3 + 100x <= 1e+6 的最大整數x

如果mid滿足那個不等式,那麼mid就有可能是答案,所以我們只能將mid送入l,而不是mid + 1;

此時,如果採用左中取mid ,l = 2,r = 3;而3確實答案,mid將一直取到2,且一直送2給 l,l 與 r 不是同乙個數,就不會出迴圈,也就是程式進入了死迴圈,所以這時只能採用右中方式取mid = (l+r+1)/2;

同理若求滿足不等式x^3 + 100x >= 1e+6 的最小整數x,則轉換是 l = mid + 1; r = mid 的時候只能採用左中方式取mid= (l+r)/2;

forwarditerlower_bound(forwarditer first, forwarditer last,const _tp& val)演算法返回乙個非遞減序列[first, last)中的第乙個大於等於值val的位置。

forwarditerupper_bound(forwarditer first, forwarditer last, const _tp& val)演算法返回乙個非遞減序列[first, last)中第乙個大於val的位置.

這兩個函式都是對應大於的,採用mid = (l+r)

/2的方式,若是小於則要mid = (l + r + 1) / 2;

LA 3971 組裝電腦

傳送門 大意是給一些零件 屬性 種類,名稱 沒用 加格,品質 電腦的品質取決於最低的配件品質,問有的錢能買的最高的電腦品質。這個題一看就是二分,o n 2 logn t 的演算法也很好想,就是排序之後二分下標,貪心可check。字串的話,我使用的是類似離散的方法編號而避免了用map,因為map st...

uvalive3971(二分 貪心)

題目的意思是 你要去買一台電腦,然後有很多種零件,你每種零件買乙個 零件給出的的資訊有種類,名字,質量.你組裝的電腦的質量,取決於你的零件中質量最差的,也就是你要讓最差值盡量大,但是 不能超出你的budget,也就是你有的錢.把零件按質量從大到小排,然後從大到小判斷這個質量能不能作為最小值.知道找到...

LA3971 組裝電腦 二分答案

演算法競賽入門經典 訓練指南 第28頁,例題12 注意二分的時候m l r 1 2,二分法為了避免死迴圈,根據情況m l r 2 m l r 1 2 題解對輸入的多個字串編號採用了map 的寫法以後可以借鑑下 題解就是假設最小的品質因子是x,則刪除所有品質因子小於x的配件,然後判斷剩下配件能否組裝出...