<问题描述>
1 #include <stdio.h> 2 #include <string.h> 3 4 #define N 100+1 5 int main() 6 { 7 int i,j,tag,k,n,v[N*2],s[N*2][N*2]; 8 scanf("%d",&n); 9 for(i=1;i<=n;i++) 10 { 11 scanf("%d",&v[i]); 12 v[i+n]=v[i]; 13 } 14 for(i=1;i<=2*n;i++) 15 { 16 s[i][i]=0; 17 } 18 for(i=1;i<n;i++) 19 { 20 for(j=1;j<=2*n-i;j++) 21 { 22 tag=0; 23 for(k=j;k<i+j;k++) 24 { 25 if(tag<s[j][k]+s[k+1][j+i]+v[j]*v[j+i]*v[k+1]) 26 tag=s[j][k]+s[k+1][j+i]+v[j]*v[j+i]*v[k+1]; 27 } 28 s[j][i+j]=tag; 29 } 30 } 31 j=s[1][n]; 32 for(i=2;i<=n;i++) 33 { 34 if(j<s[i][i+n-1]) 35 j=s[i][i+n-1]; 36 } 37 printf("%d ",s[i][i+n-1]); 38 while(true); 39 return 0; 40 }
状态转移方程 s[i][j]=max{s[i][k]+s[k+1][j]+v[i]*v[k+1]*v[j]}