文章
67
粉丝
207
获赞
29
访问
40.0k
#include <iostream>
#include <string.h>
using namespace std;
int main(){
int n;
cin >>n;
long long int a[10005],b[10005],min=0,minn=0,sum=0;
int mini=0,minni=0,cc;
for(int i=0;i<10005;i++){
a[i]=0;
b[i]=0;
}
for(int i=0;i<n;i++)
cin >> a[i];
// 循环n-1次,有n-1次的合并过程
for(int ii=0;ii<n-1;ii++){
//最后一次直接合并即可
if(ii==n-2){
sum=sum+a[0]+a[1];
}
else{min=9999999999999;
minn=99999999999999;
minni=0;
mini=0;
// 2 5 11 23
for(int i=0;i<n-ii;i++){
if(a[i]<min){
mini=i;
min=a[i];
}
if(i==n-1-ii){//最后一次循环
sum=sum+min;
}
}
for(int i=0;i<n-ii;i++){
if(a[i]<minn&&i!=mini){
minni=i;
minn=a[i];
}
if(i==n-1-ii){//最后一次循环
sum=sum+minn;
}
}
cc=0;
for(int i=0;i<n-ii;i++){
if(i==mini||i==minni)
continue;
b[cc++]=a[i];//把旧堆放到b数组
}
b[cc]=minn+min;//把新堆放到b数组
for(int i=0;i<n-ii;i++)
a[i]=0;//初始化a数组
for(int i=0;i<=...
登录后发布评论
暂无评论,来抢沙发