PKU 3253 Fence Repair

  • ハフマン木を作る要領で解けるようです
  • 分割するのではなく、全部バラけた状態からくっつける方向で考えると解けるようです
int main()
{
	int N;
	cin >> N;
	priority_queue<ll, vector<ll>, greater<ll> > ls;
	for (int i = 0; i < N; ++i) {
		ll l;
		cin >> l;
		ls.push(l);
	}

	ll answer = 0;
	while (ls.size() != 1) {
		ll cost = ls.top();
		ls.pop();
		cost += ls.top();
		ls.pop();
		answer += cost;
		ls.push(cost);
	}
	cout << answer << endl;
}