2018拼多多校招筆試貪心程式設計題小熊吃糖詳解

2021-09-19 15:21:03 字數 1214 閱讀 2377

有n只小熊,他們有著各不相同的戰鬥力。每次他們吃糖時,會按照戰鬥力來排,戰鬥力高的小熊擁有優先選擇權。前面的小熊吃飽了,後面的小熊才能吃。每只小熊有乙個飢餓值,每次進食的時候,小熊們會選擇最大的能填飽自己當前飢餓值的那顆糖來吃,可能吃完沒飽會重複上述過程,但不會選擇吃撐。

現在給出n只小熊的戰鬥力和飢餓值,並且給出m顆糖能填飽的飢餓值。

求所有小熊進食完之後,每只小熊剩餘的飢餓值。

第一行兩個正整數n和m,分別表示小熊數量和糖的數量。(n <= 10, m <= 100)

第二行m個正整數,每個表示著顆糖能填充的飢餓值。

接下來的n行,每行2個正整數,分別代表每只小熊的戰鬥力和當前飢餓值。

題目中所有輸入的數值小於等於100。

輸出n行,每行乙個整數,代表每只小熊剩餘的飢餓值。
示例1

2 5

5 6 10 20 30

4 34

3 35

4

0

第一只小熊吃了第5顆糖

第二隻小熊吃了第4顆糖

第二隻小熊吃了第3顆糖

第二隻小熊吃了第1顆糖

這是一道簡單的貪心題目,每次戰鬥力最大的熊吃能量最高的食物即可,用乙個陣列記錄食物是否被吃。要特別注意,最後輸出的時候需要原來的順序,所以要將原來的順序記錄下來

這裡多次使用到自定義排序演算法,推薦c++11中的lamda表示式。

#include #include using namespace std;

const int n = 200;

typedef pairpii;

int main()

; // 標記糖果是否被吃

pii bear[n];

cin >> n >> m;

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

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

cin >> bear[i].first >> bear[i].second;

sort(candy, candy + m, greater());

sort(bear, bear + n, (const pii& a, const pii& b) );

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

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

}

2018 拼多多校招貪心演算法題

六一兒童節,老師帶了很多好吃的巧克力到幼兒園。每塊巧克力j的重量為w j 對於每個小朋友i,當他分到的巧克力大小達到h i 即w j h i 他才會上去表演節目。老師的目標是將巧克力分發給孩子們,使得最多的小孩上台表演。可以保證每個w i 0且不能將多塊巧克力分給乙個孩子或將一塊分給多個孩子。第一行...

拼多多2018校招 小熊吃糖

有n只小熊,他們有著各不相同的戰鬥力。每次他們吃糖時,會按照戰鬥力來排,戰鬥力高的小熊擁有優先選擇權。前面的小熊吃飽了,後面的小熊才能吃。每只小熊有乙個飢餓值,每次進食的時候,小熊們會選擇最大的能填飽自己當前飢餓值的那顆糖來吃,可能吃完沒飽會重複上述過程,但不會選擇吃撐。現在給出n只小熊的戰鬥力和飢...

拼多多2018校招 最大乘積

給定乙個無序陣列,包含正數 負數和0,要求從中找出3個數的乘積,使得乘積最大,要求時間複雜度 o n 空間複雜度 o 1 輸入描述 第一行是陣列大小n,第二行是無序整數陣列a n 輸出描述 滿足條件的最大乘積輸入例子1 4 3 4 1 2輸出例子1 24思路 找出最小 次小,最大,次大,第三大的五個...