UVA 10954 Add All
2016-10-20 20:49
267 查看
UVA 10954 Add All
题目大意:给一串数字,每次可以从中去掉俩个数然后将他们的和放入。每次操作的开销为去掉的俩个数之和。求出最小的总开销
解题思路:
快速排序后去掉最小俩个数,然后将俩数之和放入后再次快速排序然后去掉俩个数……以此类推
#include <cstdio> #include <cstring> #include <stack> #include <iostream> #include <algorithm> using namespace std; long long int count(int m, long long int *num) { long long int p = 0; for(int i = 1; i < m; i++) { p = p + num[i-1] + num[i]; num[i] = num[i-1] + num[i]; sort(num+i, num+m); } return p; } int main() { int m; long long int num[5010]; while(cin >> m && m != 0) { for(int i = 0; i < m; i++) cin >> num[i]; sort(num, num+m); int res = count(m, num); cout << res << endl; } return 0; }
或者用优先队列
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> using namespace std; priority_queue<long long int, vector<int>, greater<long long int> > que; int main() { int n; long long int x; long long int re; while(cin >> n && n) { for(int i = 0; i <n; i++) { long long int a; cin >> a; que.push(a); } re = 0; while(1) { x = que.top(); que.pop(); if(que.empty()) { break; } x = x + que.top(); que.pop(); que.push(x); re = re + x; } cout << re << endl; } return 0; }
相关文章推荐
- UVa 10954 - Add All
- UVa 10954 - Add All
- UVa 10954 - Add All(最优二叉树)
- UVA - 10954 Add All
- uva 10954 add all
- uva 10954 Add All
- UVA 10954 Add All
- UVa 10954 Add All 贪心
- [贪心&&优先队列]uva10954 Add All
- 哈夫曼编码(Add All,uva 10954)
- uva10954 - Add All
- UVA 10954 Add All
- 例题8-11 全部相加(Add All, UVa 10954)
- UVa 10954,Add All
- UVA 10954 - Add All
- UVA 10954 Add All
- UVA 10954 - Add All
- UVa 10954 - Add All
- uva 10954 - Add All
- uva 10954 Add All