石子合并问题 为什么结果很大,太夸张了
#include<stdio.h>
int main(){
int a;
void StoneMerger(int n);
printf("Enter the number of stone plies:\n");
scanf("%d",&a);
StoneMerger(a);
system("pause");
return 0;
}
void StoneMerger(int n)
{
int s[n+1][n+1],a[2*n+1],b[n][2*n],c[n+1][n+1];
int i,j,r,t,m,k;
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
a[i+n]=a[i];
}
for(i=1;i<=n;i++)
{
s[i][i]=a[i];
b[i][i]=a[i];
}
for(i=1;i<=n;i++)
for(j=1;j<=i+n-1;j++)
b[i][j]=b[i][j-1]+a[j];
for(r=2;r<=n;r++)
for(i=1;i<=n;i++)
{
j=r+i-1;
s[i][j]=s[i][i]+s[i+1][j]+b[i][j];
c[i][j]=c[i][i]+c[i+1][j]+b[i][j];
for(k=i+1;k<j;k++)
{
int t=s[i][k]+s[k+1][j]+b[i][j];
int m=c[i][k]+c[k+1][j]+b[i][j];
if(t<s[i][j]) s[i][j]=t;
if(m>c[i][j]) c[i][j]=m;
}
}
for(i=2;i<=n;i++)
{
t=s[1][n];
m=c[1][n];
if(t<s[i][n+i-1]) t=s[i][n+i-1];
if(m>c[i][n+i-1]) m=c[i][n+i-1];
}
printf("The max score is:%d\n",t);
printf("The min score is:%d\n",m);
return;
}