贪心问题,每次把权重最小的连接成新的树
#include <iostream> #include <malloc.h> #include <queue> #include <string> #include <string.h> #include <iomanip> #include <stdio.h> #include <queue> using namespace std; priority_queue<int, vector<int>, greater<int> > q; int t; int main(int argc, char *argv[]) { cin >> t; while( t-- ) { int n; cin >> n; while( !q.empty() ) { q.pop(); } for( int i = 1; i <= n; i++ ) { int tmp; cin >> tmp; q.push( tmp ); } int ans = 0; for( int cnt = 1; cnt <= n-1; cnt++ ) { int tmp1,tmp2; tmp1 = q.top(); q.pop(); tmp2 = q.top(); q.pop(); ans = ans + tmp1 + tmp2; q.push( tmp1 + tmp2 ); } cout << ans << endl; } return 0; }