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 }

 

posted @ 2012-10-19 20:06  sidereal  Views(177)  Comments(0)    收藏  举报