您的位置:首页 > 产品设计 > UI/UE

ZOJ1276 Optimal Array Multiplication Sequence dp

2014-07-23 10:01 429 查看
#include<stdio.h>
#include<string.h>
int r[15];
int d[15][15],save[15][15];
int dp(int i,int j)
{
if(d[i][j]!=0)return d[i][j];
if(i==j)return 0;
int min=1<<30;
for(int k=i;k<j;k++)
{
int t=dp(i,k)+dp(k+1,j)+r[i]*r[k+1]*r[j+1];<span style="font-family: Arial, Helvetica, sans-serif;">//d(i,j)=min(d(i,k)+d(k+1,j)+ri*r(k+1)+r(j+1);</span>
if(t<min){min=t;save[i][j]=k;}
}
return d[i][j]=min;
}
void show(int i,int j)
{
if(j-i>1)
{
printf("(");
show(i,save[i][j]);
printf(" x ");
show(save[i][j]+1,j);
printf(")");
}
else if(j-i==1)
{
printf("(A%d x A%d)",i,j);
}
else printf("A%d",i);

}
int main()
{
int n,i,k=1,j;
while(~scanf("%d",&n)&&n)
{
for(i=1;i<=n;i++)
scanf("%d%d",&r[i],&r[i+1]);
memset(d,0,sizeof(d));
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
dp(i,j);
printf("Case %d: ",k++);
show(1,n);
printf("\n");

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: