题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5884 题目大意:给你n个序列,将其合并为一个,每次合并序列的花费为所合并子序列长度的和,先给你总花费t,问每次最少合并多少个子序列。 思路:很容易想到二分+贪心的办法,需要特别注意:假如枚举的 k,那么每次合并消耗的是 k−1个,最后合并完后剩下一个,所以总消耗是 n−1 个,如果 (n−1)%(k-1)!=0,会存在零头,也就是说凑不够 k 个,零头肯定不能放在最后合并,应该将这个零头放在开头合并,取这零头+1个数进行合并,也就是取这最小的几个进行合并,或者用权值为0的虚点凑齐零头,这个结论在纸上举例比划一下就明白了,本质是一个多叉哈夫曼树。另外这里可以用两个普通队列代替优先队列进行模拟,一个队列存原数组,另外一个存合并后的数,可以知道这两个都是可以保证有序,取的时候比较取最小值就行,可以将复杂度从n*logn*logn优化到n*logn。