合并果子思路

有N堆数量不同的果子,我们每次最多可以合并K堆果子,消耗体力值为合并这些堆的果子数之和,设计耗费体力最少的方案把N堆果子合并为一堆。

如果我们能每次合并K堆的话,显然按照哈弗曼的思想,每次合并最小的K堆直到合并完是最优解。但很显然有不能每次合并K堆的情况,比如N=8,K=3的情况,最后剩下两堆。

从N堆到1堆,减少的堆数是N-1堆,我们每次最多只能让整体减少K-1堆,所以,当 (N-1)%(K-1) == 0的时候,可以每次K堆合并完,当 (N-1)%(K-1) != 0 的时候,我们最后会剩下 S = (N-1)%(K-1) + 1 堆, S>0且S<=K-1

这时,最优的方案显然是先将这S堆合并为一堆,然后接下来每次合并K堆

时间: 2024-11-13 19:35:18

合并果子思路的相关文章

【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

合并果子 (codevs 1063) 题解

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

AHOI1997彩旗飘飘 VIJOS1097合并果子(noip2007)

为了防止手感下滑,就把整理长乐集训题题解的脚步给放慢了... 前几天vj死了好久,就刷起了rqnoj...里面题目质量有的太烂了,而且第一页的题号还是不连续的!! 晚上vj修好后刷了一题,还有之前刷的ahoi的题也在这里说一下吧...也无聊刷了一些特别水的题目就懒得说了... AHOI彩旗飘飘 这是一题类似于排列组合的题目吧...递推状态 数组f[100][100][100][2];表示红旗数目,黄旗数目,颜色改变的次数,末尾的旗的颜色(0为黄,1为红) 之后就是如何写递推式了: for(int

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

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

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

Vijos p1097 合并果子

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

P1090 合并果子

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

洛谷P1090 合并果子

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

Laoj P1170 [noip2004]合并果子(STL解法)

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