解题思路:
关键点就在于对于如何才能取得最大值的分析,事实上可以这样来分析:
越小的数,用到的次数越多,那么整体的值就越小,所以问题就在于,如何先处理最小的值,这里我直接采用的式一位数组来解决 的,算是比较笨的方法。
参考代码:
#include<stdio.h>
int woc(int a[],int N)//处理每次合并
{
int min=2000,fir=0,sec=0,sum=0;
for(int i=0;i<2*N;i++)
{
if(min>a[i])
{
min=a[i];
fir=i;
}
}
for(int i=2*N-1;i>=0;i--)
{
if(min==a[i])
{
sec=i;
break;
}
}
if(fir==0)
{
sum=a[fir]*a[fir+1]*a[sec-1];
a[fir]=a[sec-1];
}
else{
sum=a[fir]*a[fir-1]*a[sec+1];
a[fir]=a[sec+1];
for(int j=sec;j<2*N-2;j++)
{
a[j]=a[j+2];
}
}
return sum;
}
int main()
{
int a[200]={0},N,i,sum=0,index=0;
scanf("%d",&N);
for(i=0;i<N;i++)
{
int k;
scanf("%d",&k);
if(i==0)
{
a[index]=a[2*N-1]=k;
index++;
}
if(i>0&&i<N)
{
a[index]=a[index+1]=k;
index+=2;
}
}
index=N;
for(i=1;i<N;i++)
{
sum+=woc(a,index);
index-=1;
}
printf("%d\n",sum);
return 0;
}
ps:每次看到别人的解题思路,我就不好意思多BB了,只能说牛逼
0.0分
0 人评分