思路是首先把得到的数组进行排序,这里使用插入法排序,然后用s存放最小的两个数字之和(即为费用Pa+Pb),在数组元素第二小的地址上存放最小两数值和,最小一位清零,循环结束时s即为最终费用。
#include"stdio.h"
int main(){
int n,i,t,tt,j,x=0,s=0;
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++){
scanf("%d",a+i);
}
for(t=0;t<n-1;t++){
for(i=1;i<n;i++){//给数组从小到大排序 (插入法)
tt=a[i];
for(j=i;tt<a[j-1];j--){
a[j]=a[j-1];
}
a[j]=tt;
}
s+=a[x]+a[x+1];//s为最小两位之和
a[x+1]+=a[x];//第二小的位置上存放最小两数之和
a[x]=0;// 最小一位清零
x++;
}
printf("%d",s);
return 0;
}