您的位置:首页 > 大数据 > 人工智能

[SWERC 2015] GYM 101128C Canvas Painting [贪心]

2018-03-07 15:16 405 查看
Description:

给nn块木板,每块木板涂色花费AiAi,先开始所有木板为白色,每次选择一个颜色CC和一个数字FF,代表选择一个出现过的颜色CC,把颜色为CC的前FF块木板涂成另一种颜色,并把剩下的CC涂成另外一种颜色,每次花费为前FF块木板的价值,问把每块木板涂成不同颜色的最小代价。

Solution:

考虑倒着的过程,可以看成把相邻两段不同的颜色合并成一种颜色,花费为两种颜色木板的长度,那么就是合并果子,用堆来做就行了。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
priority_queue<ll, vector<ll>, greater<ll> > q;
ll a[10005];
int main() {
int T;
scanf("%d", &T);
while(T--) {
scanf("%d", &n);
for(int i = 1; i <= n; ++i) {
ll x;
scanf("%lld", &x);
q.push(x);
}
ll ans = 0;
while(q.size() > 1) {
ll x = q.top();
q.pop();
x += q.top();
q.pop();
ans += x;
q.push(x);
}
q.pop();
printf("%lld\n", ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: