poj 3253 huffman(切木棍)

题意:切木棍,切一刀的花费是木棍的长度。要求把木棍切成给定的长度,问最小花费。

思路:切木棍的策略为哈弗曼的逆。

输入:

3
8
5
8

输出:

34

#include 
#include 
#define N 20005
int s[N],n,T;
void adjust(int i){
	int x = s[i];
	i <<= 1;
	while(i<=n){
		if(i+1<=n && s[i+1]=1){
		if(s[i/2] <= x)
			break;
		s[i] = s[i/2];
		i >>= 1;
	}
	s[i] = x;
}
int main(){
	freopen("a.txt","r",stdin);
	while(scanf("%d",&n)!=EOF){
		int i;
		__int64 res=0;
		memset(s,0,sizeof(s));
		for(i = 1;i<=n;i++)
			scanf("%d",&s[i]);
		for(i = n/2;i>=1;i--)
			adjust(i);
		T = n;
		for(i = 1;i


你可能感兴趣的:(数据结构)