彩虹島網紅臉盆大哥最驕傲就是自己製作的木桶。一天???拿了?塊木板,其中第?塊木板的高度為ℎ?,他希望臉盆大哥能夠用這些木板製作出精美的木桶。臉盆大哥告訴???製作乙個木桶需要?塊木板,並且所有桶的底面積為?,底面的木板由???提供。???想知道用這些木塊所製作出來的木桶最多能夠盛多少體積的水。
注意,木板不能疊在另乙個木板上,且不需要考慮木桶具體是怎麼由木板組成的,即是說1塊或2塊木板也可以組成木桶,底面積仍為?。
輸入第一行為乙個整數?(2 ≤ ? ≤ 20),表示一共有?組測試資料。
對於每組測試資料:
第一行有三個整數?(2 ≤ ? ≤ 103), ?, ?(1 ≤ ?, ?, ? ≤ 103),分別表示木板的數量、製作乙個木桶所需要的木板數以及木桶的底面積。
第二行有?個整數,其中第?個整數ℎ?(1 ≤ ℎ? ≤ 103)代表第?個木板的高度。
對於每組測試資料輸出乙個整數?,代表用這些木板製作的桶最多能裝體積為?的水。
示例1
2
4 2 5
1 2 3 4
5 2 5
1 4 5 2 3
20
30
對於第一組樣例,第乙個桶由第一塊木板和第二塊木板組成,能夠盛水的體積為5,第二個桶由第三塊木板和第四塊木板組成,能夠盛水的體積為15,所以最終體積為20。
對於第二組樣例,最後會剩下一塊木板無法參與木桶的製作。
貪心+排序:木板高度降序排列,每 k 個一組,這一組的木桶體積由最短的高度決定,最後不足 k 個的捨去;因此遍歷陣列,取模運算記錄第 k 位的高度,累計的高度與底面積相乘就是總的體積。對於每一組資料,讀取木板高度的時間複雜度 o(n),排序的時間複雜度 o(nlogn),遍歷分組的時間複雜度 o(n),總的時間複雜度 o(nlogn);空間複雜度 o(n)
注意每組結束計算後要釋放 vector 的記憶體
#include
#include
#include
using
namespace std;
intmain()
cout << ans * s << endl;
vector<
int>()
.swap
(v);
}return0;
}
acm 精 挑 細 選
時間限制 3000 ms 記憶體限制 65535 kb 難度 1 輸入第一行是乙個整數n n 10 表示測試資料的組數 每組測試資料的第一行 有乙個整數m m 1000 表示倉庫中所有鋼管的數量,之後m行,每行三個整數,分別表示一根鋼管的長度 以公釐為單位 直徑 以公釐為單位 和編碼 乙個9位整數 ...
ACM 精挑細選
時間限制 3000 ms 記憶體限制 65535 kb 難度 1 描述小王是公司的倉庫管理員,一天,他接到了這樣乙個任務 從倉庫中找出一根鋼管。這聽起來不算什麼,但是這根鋼管的要求可真是讓他犯難了,要求如下 1 這根鋼管一定要是倉庫中最長的 2 這根鋼管一定要是最長的鋼管中最細的 3 這根鋼管一定要...
ACM實驗五 ACM程式設計基礎(3)
2.某售貨員要到若干城市去推銷商品,一直各城市之間的路程,他要選定一條從駐地出發,經過每個城市一遍,最後回到住地的路線,使總的路程最短。3.anagrams by stack問題,見anagrams by stack。1.為了對信件保密,需要對信件進行加密,加密方法是每個字母加5,如a寫成f,b寫成...