标签:+= col style 队列 sum priority for print span
有n n小于等于五千 个数的集合s 每次可以从s中删除两个数 然后把他们的和放回集合 直到剩下一个数 每次操作的开销等于删除两个数二之和 求最小总开销
思路:就是每次取最小的两个数即可
用优先级队列
递增:priority_queue<int,vector<int>,greater<int> >q;
递减:priority_queue<int,vector<int>,less<int> >q;
#include<bits/stdc++.h> using namespace std; int main() { int n,x; while(scanf("%d",&n)==1&&n) { priority_queue<int,vector<int>,greater<int> >q; for(int i=1;i<=n;i++) { scanf("%d",&x); q.push(x); } long long sum=0; for(int i=1;i<=n-1;i++ ) { int a=q.top();q.pop(); int b=q.top();q.pop(); q.push(a+b); sum+=a+b; } printf("%d\n",sum); } }
标签:+= col style 队列 sum priority for print span
原文地址:https://www.cnblogs.com/bxd123/p/10430317.html