C语言合并果子-贪心算法

/*有几堆水果。每次你把两堆东西移到一起,形成更大的一堆。每个动作消耗的能量是两堆水果的总重量。如何把所有的水果堆在一起,消耗最少的能量?*/

以上是题目,该题首先要读懂题目,每次移到一起以后都要将数组重新排序再次移动。

 1 #include<stdio.h>
 2
 3 int main(){
 4
 5     int t, n, m = 0;
 6     int i = 0, j = 0;
 7     scanf("%d",&n);
 8     int sum[n];
 9
10     for(i = 0; i<n;i++){
11         scanf("%d",&sum[i]);
12     }
13
14     for(i = 0; i<n-1;i++){
15         for(j = 0; j<n-i-1; j++){
16             if(sum[j]>sum[j+1]){
17                 t = sum[j];
18                 sum[j] = sum[j+1];
19                 sum[j+1] = t;
20             }
21         }
22     }
23     for(i = 1;i<n;++i){
24         sum[i] += sum[i-1];
25         m += sum[i];
26         for(j = i+1;j<n&&sum[j]<sum[j-1];++j){
27             t = sum[j-1];
28             sum[j-1] = sum[j];
29             sum[j] = t;
30         }
31     }
32
33     printf("%d",m);
34
35     return 0;
36 }

原文地址:https://www.cnblogs.com/wleaf/p/12004005.html

时间: 2024-11-16 09:26:39

C语言合并果子-贪心算法的相关文章

[Swust OJ 352]--合并果子(贪心+队列模拟)

题目链接:http://acm.swust.edu.cn/problem/352/ Time limit(ms): 1000 Memory limit(kb): 65535 Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了.多多在合并果子时总共消耗的体力等于每次合并所耗体力之和.

【NOIP合并果子】uva 10954 add all【贪心】——yhx

Yup!! The problem name reects your task; just add a set of numbers. But you may feel yourselvescondescended, to write a C/C++ program just to add a set of numbers. Such a problem will simplyquestion your erudition. So, lets add some avor of ingenuity

【贪心】合并果子

这是一道非常经常的贪心问题. 题目所遵循的原则就是 把最小的两个元素合并的话 体力消耗最少(抱歉 我不会证明 ) 之后的话用优先队列读入所有数(得重载运算符从小到大排),之后每次把队首的元素取出来和后一个元素合并.合并完后再扔进队列,循环n-1次.直到只剩下一堆时 #include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; priorit

【贪心】vijos 1097 合并果子

描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了.多多在合并果子时总共消耗的体力等于每次合并所耗体力之和. 因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力.假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,

合并果子2之蚂蚁搬沙 【贪心】

本人水平有限,题解不到为处,请多多谅解 本蒟蒻谢谢大家观看 题目: 1552: 合并果子2之蚂蚁搬沙 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 353  Solved: 158[Submit][Status][Web Board] Description 山谷中住着一个巨大的蚂蚁王国,蚁穴外有一个整洁的广场,天气晴好时蚁群常在那里举行各种活动.这天夜里,天降果子尘,第2天,广场上堆满了大大小小的果子堆,蚁哨出去数了数共有n堆,蚁后要求她的臣民将

合并果子问题浅析

这是04年NOIP普及组的一道题,题目如下: 题目描述 Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了.多多在合并果子时总共消耗的体力等于每次合并所耗体力之和. 因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力.假定每个果子重量都为1,并且已知果子的种类

贪心算法-霍夫曼编码

霍夫曼编码是一种无损数据压缩算法.在计算机数据处理中,霍夫曼编码使用变长编码表对源符号(如文件中的一个字母)进行编码,其中变长编码表是通过一种评估来源符号出现机率的方法得到的,出现机率高的字母使用较短的编码,反之出现机率低的则使用较长的编码,这便使编码之后的字符串的平均长度.期望值降低,从而达到无损压缩数据的目的.例如,在英文中,e的出现机率最高,而z的出现概率则最低.当利用霍夫曼编码对一篇英文进行压缩时,e极有可能用一个比特来表示,而z则可能花去25个比特(不是26).用普通的表示方法时,每个

11079 可以移动的石子合并(贪心)

11079 可以移动的石子合并 时间限制:1000MS  内存限制:1000K 提交次数:0 通过次数:0 题型: 编程题   语言: C++;C;VC;JAVA Description 有n堆石子形成一行(a1,a2,-,an,ai为第i堆石子个数),现要将石子合并成一堆,规定每次可选择至少2堆最多k堆移出然后合并,每次合并的分值为新堆的石子数. 若干次合并后,石子最后肯定被合并为一堆,得分为每次合并的分值之和. 现在求解将这n堆石子合并成一堆的最低得分和最高得分. 输入格式 两行.第一行n和

P1032 合并果子 - Smart Online Judge

本题采用哈夫曼编码的思路,采用贪心算法实现. 题目ID:1032 题目名称:合并果子 有效耗时:4325 ms 空间消耗:948 KB 程序代码: 1 #include<iostream> 2 #include<list> 3 #include<algorithm> 4 5 using namespace std; 6 7 list<int> lt; 8 9 10 11 //哈夫曼编码方法 12 long long haff(){ 13 long long