石子合并问题 为什么结果很大,太夸张了

a18703673235 2012-03-31 10:58:22
#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;
}
...全文
84 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧