题意:有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);
}

合并果子问题(贪心算法)相关推荐

  1. 合并果子_tyvj1066_vijos1097_codevs1063_贪心+堆

    描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看 ...

  2. [Leedcode][JAVA][第56题][合并区间][数组][贪心算法]

    [问题描述]56.合并区间 给出一个区间的集合,请合并所有重叠的区间. 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18] ...

  3. 【codevs1063NOIP04PJ】合并果子,贪心の钻石

    1063 合并果子 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 在一个果园里,多多已经将所有的果子打了下来,而且按果 ...

  4. luoguP1090 合并果子 (贪心+优先队列)

    题目链接:https://www.luogu.org/problemnew/show/P1090 思路: 典型的贪心题,显然每次选择两个最小的堆合并最后耗费的体力最少,但每次合并之后都需要寻找最小的两 ...

  5. 合并果子(贪心,优先队列)

    我们有 STL !!! STL里的优先队列 : priority_queue 定义: priority_queue<int>q; 从小到大: priority_queue<int,v ...

  6. 贪心算法——洛谷(P1090)[NOIP2004]合并果子

    该题目也属于经典的贪心算法,在这里熟悉C++里优先队列的使用. 需要导入头文件:   #include<queue> 从这个问题可以深挖出神奇的哈夫曼树问题. 因为这题里合并的是二叉树,所 ...

  7. c语言贪心算法合并箭,LeetCode刷题题库:贪心算法

    LeetCode刷题笔记:贪心算法 自大学开始,我便陆陆续续的学习一些 算法和数据结构 方面的内容,同时也开始在一些平台刷题,也会参加一些大大小小的算法竞赛.但是平时刷题缺少目的性.系统性,最终导致算 ...

  8. PAT甲级1125 Chain the Ropes:[C++题解]贪心、优先队列、合并果子

    文章目录 题目分析 题目来源 题目分析 来源:acwing 板子题:合并果子合并果子优先队列 分析:贪心策略是: 每次取最短的两条绳子a和b.该两条绳子合并为1条绳子,且长度变为a+b2\frac{a ...

  9. java区间合并_贪心算法:合并区间

    ❝ 最近文章阅读量少了很多啊打卡也少了, 是不是年底了很多录友在忙期末考试啊,哈哈. 给出一个区间的集合,请合并所有重叠的区间. 示例 1: 输入: intervals = [[1,3],[2,6], ...

  10. 每日四题打卡-4.15:耍杂技的牛/贪心绝对值不等式-货仓选址/贪心排序不等式-排队打水/huffman哈夫曼树-合并果子

    耍杂技的牛 具体:https://blog.csdn.net/qq_27262727/article/details/105515507 农民约翰的N头奶牛(编号为1..N)计划逃跑并加入马戏团,为此 ...

最新文章

  1. win7下安装redies
  2. Android Studio中mac上面的安装
  3. 2.2.python正则表达式
  4. mysql create很多table,SQL CREATE TABLE 语句
  5. 【opencv学习】【图像的阈值处理】
  6. 考研总分多少能去辽师_考研英语作文平均分出炉,你拖后腿了吗?
  7. Bailian2792 集合加法【数学】
  8. sql limit不接具体数字_MySQL的Limit 性能差?真的不能再用了?
  9. 手工清除severe.exe病毒
  10. Java中this的应用
  11. android用电脑刷root,电脑版安卓搞机助手,助你轻松刷机root
  12. 像素坐标转换实际坐标python_像素坐标转世界坐标的计算
  13. spj查询零件、工程、供应商表
  14. 梳理19年上半年图文记录笔记(ios篇)
  15. Android获取开机时间的方式(进launcher)
  16. DFS DBS算法
  17. TCAM与HASH表的差异
  18. 如何在keil中将文件封装为lib库文件
  19. 全网通报:数模国赛作弊的后果
  20. 三步教你安装微软系统,使用uiso制作U盘启动盘

热门文章

  1. 英文密码特殊字符大全
  2. pip缓存下载的包文件
  3. 谷歌浏览器 Adobe Flash Player 插件被屏蔽 解决方案
  4. leetcode4568
  5. oracle vm 安装win server 2012 错误0x000000C4
  6. Android数据库大批量数据插入优化
  7. thinkpad电源管理解决办法 win2019
  8. win7怎么关闭虚拟机服务器,为你win7系统彻底关闭退出vmware虚拟机的处理对策
  9. [机缘参悟-12]:“易经“、“儒“、“释“、“道“、“法”、“墨”、“兵”的基本原理与核心思想
  10. FPGA如何固化程序到EPCS之入门的理想教程