#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,N=7;
int p[]= {0,10,12,15,255,1,2};
int s[N],l[N],b[N];
Compress(N-1,p,s,l,b);
printf("s为:");
for(i=1;i<N;i++){
printf("%d ",s[i]);
}
printf("\nl为:");
for(i=1;i<N;i++){
printf("%d ",l[i]);
}
printf("\n最优值为:%d",s[N-1]);
return 0;
}
void Compress(int n,int p[],int s[],int l[],int b[]){
int Lmax = 256,header = 11;
s[0]=0;
int i,j;
for(i=1; i<=n; i++){
b[i] = length(p[i]);
int bmax=b[i];
s[i]=s[i-1] + bmax;
l[i] = 1;
for( j=2;j<=i&&j<=Lmax; j++){
if(bmax < b[i-j+1])
bmax = b[i-j+1];
if(s[i]>s[i-j]+j*bmax){
s[i]=s[i-j]+j*bmax;
l[i]=j;
}
}
s[i] += header;
}
}
int length(int i){
int k=1;
i=i/2;
while (i>0){
k++;
i=i/2;
}
return k;
}