博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVALive 7274 Canvas Painting (优先队列)
阅读量:5102 次
发布时间:2019-06-13

本文共 1935 字,大约阅读时间需要 6 分钟。

Canvas Painting

题目链接:

Description

Input

The first line consists of a single integer T, the number of test cases. Each test case is composed by
two lines. The first line consists of a single integer N representing the number of canvasses. The next
line contains N space separated integers representing the sizes of the canvasses.
Constraints:
1 ≤ T ≤ 100 Number of test cases.
1 ≤ Ni ≤ 100 000 Number of canvasses in the i
th test case.
1 ≤ s ≤ 100 000 Size of each canvas.
1 ≤ ∑Ti=1 Ni ≤ 100 000 Number of canvasses over all test cases in one test file.

Output

The output contains T lines, one for each test case: the minimum amount of ink the machine needs in
order to have all canvasses with different colors.

Sample Input

2
3
7 4 7
4
5 3 7 5

Sample Output

29
40

题意:

给出N张白布(顺序不定).
每次选出其中同一种颜色的若干张布染上某种跟之前不同的色,这种颜色剩下的布染上另一种颜色.
每次染色的花费是布的大小.
求要将N张布都染成不同的颜色的最小花费.

题解:

一开始想的是面积大的布染尽量少的次数,先降序排列,对后缀和求和. 这个思路并不正确. (比如样例2)
这个问题反过来看就比较简单了:
最后的结果是N张颜色各异的布,反向过程是每次选出两种颜色不同的布刷成同一颜色.
这样一来,每次操作都使得集合的大小减一. 所以总次数固定是N-1.
对于每一次操作,选择最小的两张布染色一定是最小花费. 而每次的最小花费和就是总的最小花费.
维护一个优先队列,把所有大小都加进去并升序排列.
每次弹出最小的两个元素,计数并把和再push进去参与比较.

代码:

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define LL long long#define eps 1e-8#define maxn 101000#define mod 100000007#define inf 0x3f3f3f3f#define mid(a,b) ((a+b)>>1)#define IN freopen("in.txt","r",stdin);using namespace std;priority_queue
, greater
> pq;int main(int argc, char const *argv[]){ //IN; int t; cin >> t; while(t--) { int n; scanf("%d", &n); while(!pq.empty()) pq.pop(); for(int i=1; i<=n; i++) { LL x; scanf("%lld", &x); pq.push(x); } LL ans = 0; while(pq.size() >= 2) { LL cur = pq.top(); pq.pop(); cur += pq.top(); pq.pop(); ans += cur; pq.push(cur); } printf("%lld\n", ans); } return 0;}

转载于:https://www.cnblogs.com/Sunshine-tcf/p/5769161.html

你可能感兴趣的文章
字符串处理
查看>>
HtmlUnitDriver 网页内容动态抓取
查看>>
ad logon hour
查看>>
获得进程可执行文件的路径: GetModuleFileNameEx, GetProcessImageFileName, QueryFullProcessImageName...
查看>>
证件照(1寸2寸)拍摄处理知识汇总
查看>>
罗马数字与阿拉伯数字转换
查看>>
Eclipse 反编译之 JadClipse
查看>>
Python入门-函数
查看>>
[HDU5727]Necklace(二分图最大匹配,枚举)
查看>>
距离公式汇总以及Python实现
查看>>
设计模式之装饰者模式
查看>>
一道不知道哪里来的容斥题
查看>>
Blender Python UV 学习
查看>>
window添加右键菜单
查看>>
入手腾龙SP AF90mm MACRO
查看>>
python学习4 常用内置模块
查看>>
Window7上搭建symfony开发环境(PEAR)
查看>>
ResolveUrl的用法
查看>>
Linux内核态、用户态简介与IntelCPU特权级别--Ring0-3
查看>>
第23月第24天 git命令 .git-credentials git rm --cached git stash clear
查看>>