yujingping 2012-03-02 00:28:00
点我顶贴
收藏
删除
#include<stdio.h>
int max(int a,int b)
{
return a>=b? a : b;
}
long int a[500][3],f[500][500],n,ans;
int main()
{
scanf("%d",&n);
long int i,j,k,l,r;
for(i=1;i<=n;i++)
scanf("%ld",&a[i][1]);
for(i=1;i<n;i++)
a[i][2]=a[i+1][1];
a[n][2]=a[1][1];
for(i=1;i<=n;i++)
{
a[i+n][1]=a[i][1];
a[i+n][2]=a[i][2];
}
for(l=1;l<n;l++)
for(r=1;r<=n;r++)
{
for(k=r;k<r+l;k++)
if(f[r][r+l]<f[r][k]+f[k+1][r+l]+a[r][1]*a[k+1][1]*a[r+l][2])
f[r][r+l]=f[r][k]+f[k+1][r+l]+a[r][1]*a[k+1][1]*a[r+l][2];
}
for(i=1;i<=n;i++)
{
ans=max(ans,f[i][n+i-1]);
}
printf("%ld",ans);
return 0;
}
对五个点错五个点,但都是瞬杀。
看了好多遍总感觉这方程没错啊......
新手,没有多少分,聊表谢意!!