ダイナミックプランニング-最小コストサブツリー
1225 ワード
原理参照:http://blog.163.com/functioner@126/blog/static/17283815620109304450441/
原文は組合せ部分を列挙するのに少し誤りがあり、f[i,j]=min(f[i,j],f[k][j]+f[i-k][k+j])であるべきである.
原文は組合せ部分を列挙するのに少し誤りがあり、f[i,j]=min(f[i,j],f[k][j]+f[i-k][k+j])であるべきである.
#include
#define LEN 100
int main()
{
int s[LEN][LEN];//
int f[LEN][LEN];//
int n;
int i,j,k;
scanf("%d",&n);
for(i=1;i<=n;++i)
{
scanf("%d",&s[1][i]);
f[1][i]=s[1][i];
}
for(i=1;if[i-1][j+1])
f[i][j]=f[i-1][j+1];
else
f[i][j]=f[i-1][j];
for(k=2;kf[k][j]+f[i-k][k+j])
{
f[i][j]=f[k][j]+f[i-k][k+j];
}
}
f[i][j]+=s[i][j];
}
}
printf("*****************************
");
for(i=1;i<=n;++i)
{
for(j=1;j<=n-i+1;j++)
{
printf("%-3d ",f[i][j]);
}
printf("
");
}
printf("*****************************
");
for(i=1;i<=n;++i)
{
for(j=1;j<=n-i+1;j++)
{
printf("%-3d ",s[i][j]);
}
printf("
");
}
return 0;
}