sicily1345
这种循环的倒是第一次见
View Code
1 #include <stdio.h> 2 3 int necklace[200]; 4 int m[101][101]; 5 int dp(int c[],int n) 6 { 7 for(int i=1;i<=2*n;i++) m[i][i]=0; 8 for(int r=2;r<=n;r++) 9 for(int i=1;i<2*n-r+1;i++){ //2n no value 10 int j=i+r-1; 11 m[i][j]=m[i+1][j]+c[i-1]*c[i]*c[j]; 12 for(int k=i+1;k<j;k++){ 13 int t=m[i][k]+m[k+1][j]+c[i-1]*c[k]*c[j]; 14 if(t>m[i][j]) 15 m[i][j]=t; 16 } 17 } 18 int result=0; 19 for(int i=1;i<=n;i++) 20 if(result<m[i][i+n-1]) 21 result=m[i][i+n-1]; 22 return result; 23 } 24 25 int main() 26 { 27 int n; 28 while(scanf("%d",&n)!=EOF){ 29 for(int i=0;i<n;i++){ 30 scanf("%d",&necklace[i]); 31 necklace[i+n]=necklace[i]; 32 } 33 int max=dp(necklace,n); 34 printf("%d\n",max); 35 } 36 return 0; 37 }


浙公网安备 33010602011771号