还是优先队列
#include<iostream> #include<vector> #include<queue> using namespace std; vector<int>a = { 5,12,11,2 }; int maxtimes, mintimes = 0; int main() { priority_queue<int, vector<int>, greater<int>> q1; priority_queue<int, vector<int>, less<int>>q2; for (int i = 0; i < (int)a.size(); i++) { q1.push(a[i]); q2.push(a[i]); } while (q2.size()) { int temp; if (q2.size() != 1) { maxtimes += q2.top(); temp = q2.top(); q2.pop(); maxtimes += q2.top() - 1; temp += q2.top(); q2.pop(); q2.push(temp); } else q2.pop(); } while (q1.size()) { int temp; if (q1.size() != 1) { mintimes += q1.top(); temp = q1.top(); q1.pop(); mintimes += q1.top()-1; temp += q1.top(); q1.pop(); q1.push(temp); } else q1.pop(); } cout << maxtimes <<' '<<mintimes << endl; }