比赛 动规 评测结果 AAAAAAA
题目名称 加分二叉树 最终得分 100
用户昵称 Regnig Etalsnart 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2017-06-18 21:02:58
显示代码纯文本
#include<cstdio>
#define syy myson
using namespace std;
const int INF=0x7fffffff;
int n,f[40][40],a[40]={0},root[40][40]={0},len,i,j,k;
void front(int x,int y)
{
	if(root[x][y])printf("%d ",root[x][y]);
	if(root[x][root[x][y]-1])front(x,root[x][y]-1);
    if(root[root[x][y]+1][y])front(root[x][y]+1,y);
}
int Main()
{
	freopen("jfecs.in","r",stdin);freopen("jfecs.out","w",stdout);
	scanf("%d",&n);
	for(i=0;i<=n;i++)for(j=0;j<=n;j++)f[i][j]=1;
	for(i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		f[i][i]=a[i];
		root[i][i]=i;
	}
	for(len=1;len<=n;len++)for(i=1;i<=n;i++)
	{
		j=i+len;
		if(j<=n)
		{
            int tmp=-INF;
            for(k=i;k<=j;k++)if(tmp<(f[i][k-1]*f[k+1][j]+a[k]))
            {
                tmp=f[i][k-1]*f[k+1][j]+a[k];
                root[i][j]=k;
            }
            f[i][j]=tmp;
        }
	}
	printf("%d\n",f[1][n]);
	front(1,n);
	return 0;
}
int main(){;}
int syy=Main();