//我的想法是 在 石子堆中找一个单调的区间 例如 1 2 3 2 1,分别合并为以下情况 3 3 2 1, 3 3 3,6 3, 9。基本是这种思想,
//可是提交后老是 WA,希望那位高手可以帮帮忙
#include <stdio.h>
int solve(int *a,int n);
int main ()
{
int stone[50000];
int anwser[10000];
int i,j=0;
int n;
scanf("%d",&n);
while(n)
{
for(i=0;i<n;i++)
scanf("%d",&stone[i]);
if(n!=1)
anwser[j]= solve(stone,n);
else
anwser[j]=0;
scanf("%d",&n);
j++;
}
for(i=0;i<j;i++)
printf("%d/n",anwser[i]);
}
int solve(int *stone,int n)
{
int sum=0;
int i,j,l;
while(n>=3)
{
for(i=1;i<n-1&&n>=3;i++)
{
if(stone[i-1]<=stone[i+1])
{
sum+=stone[i]=stone[i-1]+stone[i];
for(j=i;j<n;j++)
stone[j-1]=stone[j];
n--;
i--;
}
}
for(l=n-2;l>0&&n>=3;l--)
{
if(stone[l+1]<=stone[l-1])
{
sum+=stone[l]=stone[l+1]+stone[l];
for(j=l+2;j<n;j++)
stone[j-1]=stone[j];
n--;
}
}
}
sum+=stone[0]+stone[1];
return sum;
}
本文介绍了一种针对石子堆合并问题的算法实现思路。通过寻找单调区间进行合并操作,如12321合并为3321等,旨在减少元素数量至2个,并返回所有合并操作的总和。
1380

被折叠的 条评论
为什么被折叠?



