二分查詢 洛谷P1094

2021-08-29 04:44:08 字數 758 閱讀 3023

題目鏈結在這:

題目很簡單,演算法也很簡單,我相信沒有人不會做這個題的,但是我為什麼要寫這篇題解呢,因為我被乙個東西坑了將近乙個小時(我太蒻了!)。

看了好多題解都是用兩個指標乙個開頭乙個結尾然後移動,但是我確實一開始就不是這樣想的啊!(我蒻!)

先說思路:sort是肯定要sort的,然後直接for一遍每乙個物品,用vis陣列記錄每一件物品有沒有被訪問過,然後就二分查詢w-wi,(問題來了!一開始用的是lower_bound,不知道當時怎麼想的,可能是我以前lower_bound用的比較多吧,lower_bound是查詢陣列中第乙個x的位置,這與題目解法肯定大相徑庭了),二分查詢就用stl的upper_bound,但是問題又來了,upper_bound返回的是位置的後乙個位置,所以upper_bound(v.begion,v.end(),x)-v.begin-1才可以找到最後乙個x的位置。         每次從w-wi的最後乙個位置往前找,並將找到的用vis標記。   這個題目大概就這個一回事。

下面是**:

#include using namespace std;

const int maxn = 31000;

bool vis[maxn];

void init()

int main()

sort(v.begin(),v.end());

int cnt = 0;

for(int k=0;k=k;i--)

}if(!found)

}} cout

洛谷P1094 紀念品分組

元旦快到了,校學生會讓樂樂負責新年晚會的紀念品發放工作。為使得參加晚會的同學所獲得 的紀念品價值相對均衡,他要把購來的紀念品根據 進行分組,但每組最多只能包括兩件紀念品,並且每組紀念品的 之和不能超過乙個給定的整數。為了保證在盡量短的時間內發完所有紀念品,樂樂希望分組的數目最少。你的任務是寫乙個程式...

洛谷 P1094 紀念品分類

剛開始看到這題就確定這題最好先要排序 第乙個想法是排好序後先讓第乙個和從倒數第乙個開始相加和如果就 w,那麼用n除以2或者再加一得出答案,然後發現隨便 當w 110 n 5序列為 10 50 60 90 100便不成立,遂將其捨棄。第二個想法 依舊是從前面和倒數往前的相加,如果大於w,那麼就代表這個...

洛谷 P1094 紀念品分組

元旦快到了,校學生會讓樂樂負責新年晚會的紀念品發放工作。為使得參加晚會的同學所獲得 的紀念品價值相對均衡,他要把購來的紀念品根據 進行分組,但每組最多只能包括兩件紀念品,並且每組紀念品的 之和不能超過乙個給定的整數。為了保證在盡量短的時間內發完所有紀念品,樂樂希望分組的數目最少。你的任務是寫乙個程式...