# 題目: UVa 10954 - Add All
# 題目說明
題目說明了你的目標: 加全
例如 1 + 2 + 3
先 1 + 2
cost 3
再 3 + 3
cost 6
總共 cost 9
INPUT:
每筆資料的第一行有一個整數 N
,代表接下來有 N
個整數
當 N
為 0
時結束程式
OUTPUT:
輸出全部相加所需最少的 cost
# 解題方法
用 priority queue
儲存資料 (升冪排序)
每次取最前 (小) 兩個做相加即可
# 參考程式碼
#include <iostream> | |
#include <queue> | |
using namespace std; | |
int main() | |
{ | |
ios::sync_with_stdio(false); | |
cin.tie(nullptr); | |
cout.tie(nullptr); | |
int n; | |
while (cin >> n && n) { | |
priority_queue<int, vector<int>, greater<int>> line; | |
int input, temp, result = 0; | |
while (n--) cin >> input, line.emplace(input); | |
while (line.size() > 1) { | |
temp = line.top(), line.pop(); | |
temp += line.top(), line.pop(); | |
line.emplace(temp); | |
result += temp; | |
} | |
cout << result << "\n"; | |
} | |
return 0; | |
} |
# 參考資料
https://www.larrysprognotes.com/UVa%20-%2010954/