问题描述:给定一些绳子的长度,连接起来,绳子长度减半,求全部连接起来绳子的最大长度。
解题思路:哈夫曼编码的应用。
AC代码:
/*1125 Chain the Ropes (25 分)
*证明:没有必要用堆,或者像优先队列,哈夫曼编码的方法,得到绳子一定是最小的。
*&1:测试点4错误,&2通过
*/
#include<iostream>
#include<algorithm>
using namespace std;
#define MAX 10005
int arr[MAX];
int main()
{
freopen("test.txt","r",stdin);
int N;
scanf("%d",&N);
for(int i=0;i<N;++i)scanf("%d",&arr[i]);
sort(arr,arr+N);
//double M=arr[0];//居然是取整?数据类型。。。。。。。
int M=arr[0];
for(int i=1;i<N;++i){
//M=(M+arr[i])/2.0;
M=(M+arr[i])/2;
}
//printf("%.0lf",M);
printf("%d\n",M);
return 0;
}