#include  < stdio.h >

int      n;
int      r[ 110 ][ 110 ];
int      p[ 110 ]; 


int  main()
{
    
while ( scanf( " %d " , & n) !=  EOF )
    
{
        
for int  i =   0 ; i <  n;  ++ i )
        
{
            scanf(
" %d " & p[i] );
            r[i][i]
=   0 ; r[i + 1 ][i] =   0 ; r[i][i + 1 ] =   0 ;
        }

        
        
for int  d =   2 ; d <  n;  ++ d )
            
for int  i =   0 ; i <  n -  d;  ++ i )
            
{
                
int  j =  i +  d;
                
                r[i][j]
=  r[i + 1 ][j] +  p[i] *  p[i + 1 ] *  p[j];
                
                
for int  k =  i + 1 ; k <  j;  ++ k )
                
{
                    
int  t =  r[i][k] +  r[k][j] +  p[i] *  p[k] *  p[j];
                    
                    
if ( t <  r[i][j] ) r[i][j] =  t;
                }

            }

    
        printf(
" %d\n " , r[ 0 ][n - 1 ] );
    }

    
    
return   0 ;
}

posted on 2008-11-03 17:56 Darren 阅读(578) 评论(0)  编辑 收藏 引用 所属分类: 动态规划

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理