NOIP2006 energy

<问题描述>

 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\n",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]}

 

posted @ 2013-07-05 18:09  simplesslife  阅读(170)  评论(0编辑  收藏  举报