问题描述
在一个圆形操场的四周摆放着n堆石子。现要将石子有次序地合并成一堆。
规定每次只能选择相邻的两堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。
试设计一个算法,计算出将n堆石子合并成一堆的最小得分和最大得分。
测试用例:
4(石子的堆数)
4 4 5 9(每一堆的石子数目)
输出: 43 54
这里只写了最大,最小思路相同#include<stdio.h>
#define n 4
int a[]={4,4,5,9};
int main()
{
int i,j,max=0,sum=0,temp=0;
for(i=0;i<n;i++)
{
sum=a[i];
temp=0;
for(j=1;j<n;j++)
{
sum+=a[(i+j)%4];
temp+=sum;
}
max=max>temp?max:temp;
}
printf("%d\n",max);
}