LA3871二分最大最小值

2021-08-16 04:56:04 字數 1721 閱讀 1636

此題題目描述的很簡單,就是讓我們用有限的預算找到最小品質因子最大的電腦元件,並且每種元件必須都要買。這種求「最小值最大」的常用方法就是二分:若猜想的答案為

x x

,則取所有品質因子大於

x' role="presentation" style="position: relative;">x

x的元件進行組裝,如果能不超過預算,則說明正確答案

>=

x >=

x。因此,我們只需要列舉所有的品質因子,當第乙個不滿足題意的

x x

出現時,則解題結束。

但需要注意,此題有時間限制,因此必須使用二分法進行,時間複雜度為o(

lgn)

' role="presentation" style="position: relative;">o(l

gn)o

(lgn

)。此題涉及到type,name,price,quality,比較複雜,可使用map進行hash,再給每個型別的元件乙個vector,price和quality使用結構體進行儲存。

需熟練使用map的各種函式。

在**中已經表明,如果去掉if(cheapest == budget)這句話,則不能ac,顯示為wrong answer,初步猜想是由於如果品質因子太大導致sum太大超出了int表示範圍。

在**中進行二分查詢時,使用int middle = (right+left)/2則顯示超時,為什麼?

可將質量因子先排好序,再用二分查詢進行列舉,可能會更快。

#include 

#include

#include

using

namespace

std;

const

int maxn = 1000 + 10;

int cnt = 0;

int n; //預算和元件數目

int budget;

struct compont ;

std::vector

comp[maxn]; //每一項都是vector的陣列

std::map

id;

int convert(string type)

return id[type];

}//看品質不小於q的元件是否能在預算範圍內組裝

bool judge(int q)

sum += cheapest;

//若沒加這一句,則不能ac

if(cheapest == budget)

return

false;

if (sum > budget)

return

false;

}return

true;

}int main()

id.clear();

int maxq = 0;

for (int i = 0 ; i < n; i++));}

//使用二分法來加快速度

int left = 0,right = maxq;

while (left < right)

}cout

<< left << endl;

}return

0;}

歡迎關注我的個人部落格。

二分 最大的最小值

mad jim jaspers為了證明釹磁鐵的強大,拿來了乙個有n個小槽的長木條,m個釹磁鐵,第i個小槽在xi的位置上,為了不讓磁鐵互相吸引,每塊磁鐵離其他磁鐵的距離應該盡可能的大。請你幫mjj寫乙個程式,求出所有磁鐵之間最小距離的最大值。只要磁鐵距離大於等於1就不會互相吸引。輸入格式 第一行兩個數...

二分 最小值最大化

問題描述 記得上學那會,fbs同學經常會欺負蘿蔔同學。有一次,他出了這麼一道題目,想為難一下蘿蔔同學。題目是這樣的 有n個整數x i,x i值的範圍從0到1000000000。要從中選出c個數 2 c n 使得任意兩個數差的絕對值的最小值盡可能大,求這個最大值。由於資料太大,這次蘿蔔同學的確被難住了...

最大化最小值 二分

aggressive cows 題目意思 農民約翰有用c隻牛,然後他有n個隔間,每個隔間都有自己的座標位置 一維的 pos,如何安排把牛安排進隔間才能使,所有牛之間距離的最小值最大,我們不需要求這個分配方案,我們只需要求這個最小距離的最大值,很裸的最小值最大化。輸入 n 5m 3x 輸出 3 在位置...