合并果子问题(贪心算法)
题意:有n堆果子,重为ai。 每次合并果子消耗的体力为两堆果子重量之和。求消耗的最小体力。
转换:每次从n个数中取出最小的两个数,累加它们的和。数列中去掉了这两个数,新增了它们的和。
思路1:类似于前缀和,对数组进行一次排序,求出每个数与它前一个数的和并存在另一个数组 b里。循环找出b中的最小值,进行累加,并更改最近的非0相关数据。
弊端:过于复杂,且没有必要再增一个b进行二级修改。对0的处理过于繁琐且易出错。是思考不成熟的表现。应该继续思考再打代码,不然会在错误方向上浪费很多时间。
思路2:对数组进行排序,循环,取 i 和 i+1 位置上的数相加,更新i+1位置上数的值。若 i > i+1则再次排序。
弊端:时间复杂度过高,过了5个测试点。
int phy(int m, int n, int*a, int size, int k)
{k+=a[m] + a[n];a[n]+=a[m];if(n==size-1) return k;if(a[n]>a[n+1]) qsort(a,size,sizeof(a[0]),cmp);phy(n,n+1,a,size,k);}
思路3:时间损耗最大的地方是排序。其实可以不排序,只取出最小的两个数即可。
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>
#define N 10005int n,a[N],phy=0;int df(int x) //选择排序
{int p = x;for(int i=x+1; i<n; i++){if(a[i]<a[p]) p=i;}if(p!=x) {int t=a[p];a[p]=a[x];a[x]=t;}return a[x];
}int main(void)
{scanf("%d",&n);for(int i=0; i<n; i++) scanf("%d",&a[i]);for(int i=0; i<n-1; i++){phy+=df(i) + df(i+1);a[i+1]+=a[i]; }printf("%d",phy);
}
合并果子问题(贪心算法)相关推荐
- 合并果子_tyvj1066_vijos1097_codevs1063_贪心+堆
描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看 ...
- [Leedcode][JAVA][第56题][合并区间][数组][贪心算法]
[问题描述]56.合并区间 给出一个区间的集合,请合并所有重叠的区间. 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18] ...
- 【codevs1063NOIP04PJ】合并果子,贪心の钻石
1063 合并果子 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 在一个果园里,多多已经将所有的果子打了下来,而且按果 ...
- luoguP1090 合并果子 (贪心+优先队列)
题目链接:https://www.luogu.org/problemnew/show/P1090 思路: 典型的贪心题,显然每次选择两个最小的堆合并最后耗费的体力最少,但每次合并之后都需要寻找最小的两 ...
- 合并果子(贪心,优先队列)
我们有 STL !!! STL里的优先队列 : priority_queue 定义: priority_queue<int>q; 从小到大: priority_queue<int,v ...
- 贪心算法——洛谷(P1090)[NOIP2004]合并果子
该题目也属于经典的贪心算法,在这里熟悉C++里优先队列的使用. 需要导入头文件: #include<queue> 从这个问题可以深挖出神奇的哈夫曼树问题. 因为这题里合并的是二叉树,所 ...
- c语言贪心算法合并箭,LeetCode刷题题库:贪心算法
LeetCode刷题笔记:贪心算法 自大学开始,我便陆陆续续的学习一些 算法和数据结构 方面的内容,同时也开始在一些平台刷题,也会参加一些大大小小的算法竞赛.但是平时刷题缺少目的性.系统性,最终导致算 ...
- PAT甲级1125 Chain the Ropes:[C++题解]贪心、优先队列、合并果子
文章目录 题目分析 题目来源 题目分析 来源:acwing 板子题:合并果子合并果子优先队列 分析:贪心策略是: 每次取最短的两条绳子a和b.该两条绳子合并为1条绳子,且长度变为a+b2\frac{a ...
- java区间合并_贪心算法:合并区间
❝ 最近文章阅读量少了很多啊打卡也少了, 是不是年底了很多录友在忙期末考试啊,哈哈. 给出一个区间的集合,请合并所有重叠的区间. 示例 1: 输入: intervals = [[1,3],[2,6], ...
- 每日四题打卡-4.15:耍杂技的牛/贪心绝对值不等式-货仓选址/贪心排序不等式-排队打水/huffman哈夫曼树-合并果子
耍杂技的牛 具体:https://blog.csdn.net/qq_27262727/article/details/105515507 农民约翰的N头奶牛(编号为1..N)计划逃跑并加入马戏团,为此 ...
最新文章
- win7下安装redies
- Android Studio中mac上面的安装
- 2.2.python正则表达式
- mysql create很多table,SQL CREATE TABLE 语句
- 【opencv学习】【图像的阈值处理】
- 考研总分多少能去辽师_考研英语作文平均分出炉,你拖后腿了吗?
- Bailian2792 集合加法【数学】
- sql limit不接具体数字_MySQL的Limit 性能差?真的不能再用了?
- 手工清除severe.exe病毒
- Java中this的应用
- android用电脑刷root,电脑版安卓搞机助手,助你轻松刷机root
- 像素坐标转换实际坐标python_像素坐标转世界坐标的计算
- spj查询零件、工程、供应商表
- 梳理19年上半年图文记录笔记(ios篇)
- Android获取开机时间的方式(进launcher)
- DFS DBS算法
- TCAM与HASH表的差异
- 如何在keil中将文件封装为lib库文件
- 全网通报:数模国赛作弊的后果
- 三步教你安装微软系统,使用uiso制作U盘启动盘
热门文章
- 英文密码特殊字符大全
- pip缓存下载的包文件
- 谷歌浏览器 Adobe Flash Player 插件被屏蔽 解决方案
- leetcode4568
- oracle vm 安装win server 2012 错误0x000000C4
- Android数据库大批量数据插入优化
- thinkpad电源管理解决办法 win2019
- win7怎么关闭虚拟机服务器,为你win7系统彻底关闭退出vmware虚拟机的处理对策
- [机缘参悟-12]:“易经“、“儒“、“释“、“道“、“法”、“墨”、“兵”的基本原理与核心思想
- FPGA如何固化程序到EPCS之入门的理想教程