**合并排序,代价
K叉哈夫曼树返回代价值**
大佬链接
typedef long long ll;
const int maxn=100000+10;
ll a[maxn];
ll b[maxn];
ll N,M;
ll Hafuman(int k) //返回总代价
{
int ai,bi,blen;
blen=0;//b数组的长度
ai=bi=0;
ll cost=0;
bool first=true;
while (N-ai+blen-bi>1)
{
int num=0;
if (first) //先取出 取不完k的余值x
{
if((N-k)%(k-1)==0) num=k;
else num=(N-k)%(k-1)+1;
first=false;
}
else num=k;
int sum=0;//本次合并
while(num--)//从b a中取出num个数相加 放入b数组
{
if(ai==N) sum+=b[bi],bi++;
else if (bi==blen) sum+=a[ai],ai++;
else if (a[ai]<b[bi]) sum+=a[ai],ai++;
else sum+=b[bi],bi++;
}
cost+=sum;
b[blen++]=sum;
if(cost>M) return M+1;
}
return