P1090-合并果子【离散化,队列,时间复杂度O(n)】
正题
洛谷题目链接:
https://www.luogu.org/problemnew/show/P1090
洛谷博客链接:
https://www.luogu.org/blog/user52918/solution-p1090
O(nlogn)O(nlogn)O(n log n)堆算法:
https://blog.csdn.net/mr_wuyongcong/article/details/79223780
大意
有n个果子堆,两两合并价格是两堆和相加,求合并为一堆后最小价格。
解题思路
据说是离散化算法 就是先把原本的从小到大排序排好。然后用两个队列,一个是存储原本的,另一个是存储合成的(由于原本的是从小到大所有新开的也是从小到大)。然后在两个队列的头取最小的,执行两次然后把这两个合并加入第二个队列中。 然后由于输入: (1≤ai≤20000)(1≤ai≤20000)(1≤ai≤20000) ,所以用桶排序就可以 O(n)O(n)O(n) 时间复杂度
代码
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int k,x,num,n1,n2,a1[30001],a2[30001],t[20001],w,sum;
int main()
{scanf("%d",&num);memset(a1,127/3,sizeof(a1));memset(a2,127/3,sizeof(a2));for (int i=1;i<=num;i++){scanf("%d",&x);t[x]++;//桶}for (int i=1;i<=20000;i++){while (t[i])//通排序{t[i]--;a1[++n1]=i;}}int i=1,j=1;k=1;while (k<num){if (a1[i]<a2[j])//取最小值{w=a1[i];i++;}else{w=a2[j];j++;}if (a1[i]<a2[j])//取第二次{w+=a1[i];i++;}else{w+=a2[j];j++;}a2[++n2]=w;//加入第二个队列k++;//计算合并次数sum+=w;//计算价值}printf("%d",sum);
}
P1090-合并果子【离散化,队列,时间复杂度O(n)】相关推荐
- P1090 合并果子 / [USACO06NOV] Fence Repair G(贪心+优先队列) 洛谷
题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可 ...
- 洛谷P1090 合并果子
合并果子 题目链接 这个只能用于结构体中 struct item {int val;friend bool operator < (item a,item b){return a.val > ...
- 洛谷——P1090 合并果子
题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可 ...
- 贪心算法——洛谷(P1090)[NOIP2004]合并果子
该题目也属于经典的贪心算法,在这里熟悉C++里优先队列的使用. 需要导入头文件: #include<queue> 从这个问题可以深挖出神奇的哈夫曼树问题. 因为这题里合并的是二叉树,所 ...
- 合并果子(洛谷-P1090)
题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可 ...
- 树-堆结构练习——合并果子之哈夫曼树
树-堆结构练习--合并果子之哈夫曼树 Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆 ...
- [NOIP2004]合并果子
题目: [NOIP2004]合并果子 ,哈哈,我们今天来看一道比较简单的题嘛,这是选自NOIP上的一道题,好了,我们一起来看看题意吧: 考虑到直接复制题目,或者截屏的方式不是很方便阅读,我就把直接题目 ...
- java合并果子_C++(STL)树-堆结构练习——合并果子之哈夫曼树
priority_queue 对于基本类型的使用方法相对简单. 他的模板声明带有三个参数,priority_queue Type 为数据类型, Container 为保存数据的容器,Functiona ...
- 1369:合并果子(fruit)——优先队列
[题目描述] 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和 ...
最新文章
- 计算机小知识应用,计算机应用知识(要熟悉电脑的运用,这十个小知识你不能不懂!)...
- hive执行流程(3)-Driver类分析1Driver类整体流程
- linux中I/O设备分为两类:字符设备和块设备。
- mysql 从数据库配置文件_mysql数据库配置文件
- Spark内核以及源码解析
- php html转为pdf文件,php使用wkhtmltopdf实现html转pdf
- Android获取最新发送短信的基本信息,没有之一
- httpSession的正确理解
- java运行时内存分配详解
- Python实现用户登录
- kafka 启动 与redis启动
- HTTP协议详细总结
- PHP json_encode中文乱码解决方法
- word2007里插入分节符
- 190404每日一句
- python集合的并交差操作
- 电商数据分析师面试题分享
- MPB:山大倪金凤组-​​白蚁肠道微生物样品收集与制备
- jira是干什么_jira是什么
- Flask:使用蓝图来改进项目
热门文章
- php中添加一个链接,使用php在推文中链接一个标签
- 显卡mx150和230哪个好_建模渲染用专业图形显卡和游戏显卡哪个更好?
- 支持向量回归代码_RDKit:基于支持向量回归(SVR)预测logP
- mysql 10分钟一聚合_SQL-根据DateTime查询多个聚合-MySQL
- [设计模式]代理模式
- [MySQL基础]MySQL常见命令介绍
- LeetCode 24两两交换链表中的节点-中等
- [蓝桥杯2019初赛]质数-质数筛or 水题
- word List28
- php 配置远程调试,PHP Linux 环境下搭建 XDEBUG并配置远程调试