码迷,mamicode.com
首页 > 其他好文 > 详细

poj 1651

时间:2014-08-12 22:01:04      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   strong   for   


hnldyhy
// poj 1651 矩阵连乘 DP
#include <iostream>
#include <string.h>
using namespace std;
int dp[103][103],s[103];
int main()
{ int n,i,j,k,min;
cin>>n;
for(i=1;i<=n;++i) cin>>s[i];
memset(dp,0,sizeof(dp));
for(i=n-2;i>=1;--i)
for(j=i+2;j<=n;++j)
{ min=i+1;
for(k=i+2;k<=j-1;++k)
if((dp[i][k]+dp[k][j]+s[i]*s[j]*s[k])<(dp[i][min]+dp[min][j]+
s[i]*s[j]*s[min])) min=k;
dp[i][j]=dp[i][min]+dp[min][j]+s[i]*s[j]*s[min];
}
cout<<dp[1][n]<<endl;
return 0;
}

 

*************************************************************************

 

1651 poj 递归
#include <iostream>
#include<string.h>
using namespace std;
int dp[105][105],p[105],n;
int min(int a,int b) { return a>b?b:a ; }

int f(int x,int y)
{ int t,i ;
if(x==y) return dp[x][y]=0;
else
{ t=f(x,x)+f(x+1,y)+p[x-1]*p[x]*p[y];
for(i=x+1; i<y; i++)
t=min(t,f(x,i)+f(i+1,y)+p[x-1]*p[x]*p[y]);
return dp[x][y]=t ;
}
}
int main( )
{
while(cin>>n)
{
for(int i=0; i<n ; i++)
cin>>p[i] ;
memset(dp,-1,sizeof(dp));
f(1,n-1);
cout<<dp[1][n-1];
}

}

bubuko.com,布布扣bubuko.com,布布扣

bubuko.com,布布扣

poj 1651,布布扣,bubuko.com

poj 1651

标签:style   blog   http   color   os   io   strong   for   

原文地址:http://www.cnblogs.com/2014acm/p/3908496.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!