学习笔记:[上课卖萌]优先队列不详解
来源:互联网 发布:人民网 网络彩票牌照 编辑:程序博客网 时间:2024/04/28 18:47
随便说说
今天被各(fan)路(shen)dalaoAK全场…我好菜啊=w=
13道题写了9道酱….范神怒砍1000+…
我这么菜还被逼迫去讲题QAQ没办法上去露个脸咯….
讲了个大水题(其他的我也不会啊QAQ)…
↓noip2004 合并果子
问题描述
在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。 因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。 例如有3种果子,数目依次为1,2,9。可以先将 1、2堆合并,新堆数目为3,耗费体力为3。接着,将新堆与原先的第三堆合并,又得到新的堆,数目为12,耗费体力为 12。所以多多总共耗费体力=3+12=15。可以证明15为最小的体力耗费值。
输入文件
输入文件fruit.in包括两行,第一行是一个整数n(1 <= n <= 10000),表示果子的种类数。第二行包含n个整数,用空格分隔,第i个整数ai(1 <= ai <= 20000)是第i种果子的数目。
输出文件
输出文件fruit.out包括一行,这一行只包含一个整数,也就是最小的体力耗费值。输入数据保证这个值小于231。
题解
水题….每次合并最小的一对….懒得写堆/插排…直接优先队列…QAQ
// fruit.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<queue>#include<vector>#include<iostream>#include<cstdio>#include<cmath>#include<cstdlib>#include<algorithm>#include<cstring>using namespace std;struct cmp{ bool operator ()(int a, int b) //重载()...仿函数... { return a>b;//最小值优先...上课讲反了尴尬癌都要犯了.... }};int main(){ freopen("fruit.in", "r", stdin); freopen("fruit.out", "w", stdout); int n; cin >> n; int a; priority_queue<int, vector<int>, cmp>que; for (int i = 1; i <= n; i++) { cin >> a; que.push(a); } long long ans = 0; for (int i = 1; i<n; i++) { int x, y; x = que.top(); que.pop(); y = que.top(); que.pop(); ans += x + y; x += y; que.push(x); } cout << ans; return 0;}
By Cansult
阅读全文
1 0
- 学习笔记:[上课卖萌]优先队列不详解
- 优先队列的学习笔记
- 优先队列(堆)--二叉堆学习笔记
- 【学习笔记】关于优先队列 Priority_queue
- Priority_Queue 优先队列 C++学习笔记
- 算法导论学习笔记 6.5 优先队列
- STL学习笔记之容器--优先队列
- struts1上课学习记录笔记
- 优先队列详解
- 优先队列详解
- 优先队列详解
- 优先队列详解
- 优先队列详解
- 优先队列详解(转载)
- 优先队列详解
- STL优先队列详解
- 优先队列详解
- 优先队列详解
- PAT (Advanced Level) Practise 1016 Phone Bills (25)
- struts.xml
- Spring Boot JMS
- 图形打印问题
- C++primer 第十三章笔记 初稿
- 学习笔记:[上课卖萌]优先队列不详解
- 如何监听CollapsingToolbarLayout的展开与折叠
- VS~单步调试DLL
- BZOJ-1898 Swamp 沼泽鳄鱼
- linux常用命令
- 页面js登录
- moosefs分布式文件系统的启动与关闭
- Ubuntu14.04+cuda7.5+caffe+cudnn安装
- 05_快速排序