UVA 10954 Add All
2017-08-11 21:57
405 查看
题意:有n个数的集合S,每次可以从S中删除两个数,然后把它们的和放回集合,直到剩下最后一个数。每次操作的开销等于删除的两个数的和,求最小总开销
解题思路:优先队列.Huffman编码的建立过程,但是因为n比较小,所以可以直接用优先队列实现。每次都将最小的两个数相加然后再压入队列,直到剩下最后一个数
代码:
解题思路:优先队列.Huffman编码的建立过程,但是因为n比较小,所以可以直接用优先队列实现。每次都将最小的两个数相加然后再压入队列,直到剩下最后一个数
代码:
#include <iostream> #include <algorithm> #include <string> #include <cstring> #include <cstdio> #include <cmath> #include <queue> using namespace std; int main() { int n,x; while(cin>>n&&n) { priority_queue<int,vector<int>,greater<int> > q;//数小的优先级大 for(int i=0;i<n;i++) { cin>>x; q.push(x); } int ans=0; while(q.size()>1) { int a=q.top();q.pop(); int b=q.top();q.pop(); ans+=a+b; q.push(a+b); } cout<<ans<<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
- uva10954 - Add All
- UVa10954 Add All (优先队列)
- UVa 10954,Add All
- uva - 10954 - Add All(优先队列、哈夫曼编码思想)
- uva10954 - Add All(multiset功能)
- 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