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

P1040 加分二叉树

时间:2018-05-21 21:53:30      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:ref   class   include   span   source   scan   algo   https   printf   

P1040 加分二叉树

对于有些dp来说,记忆化的正向思维会使人更好理解233.

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
long long memory[50][50];
int root[50][50];
long long data[50];
int n;
long long dfs(int l,int r)
{
    if(memory[l][r])
        return memory[l][r];
    if(l==r)
    {
        memory[l][r]=data[l];
        return memory[l][r];
    }
    if(l>r)
    {
        memory[l][r]=1;
        return 1;
    }
    long long ans=0;
    for(int i=l;i<=r;i++)
        if(ans<dfs(l,i-1)*dfs(i+1,r)+data[i])   
        {
            ans=memory[l][i-1]*memory[i+1][r]+data[i];
            root[l][r]=i;
        }
    memory[l][r]=ans;
    return ans;
}
void print(int l,int r)
{
    if(l>r)
        return ;
    printf("%d ",root[l][r]);
    print(l,root[l][r]-1);
    print(root[l][r]+1,r);
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        root[i][i]=i;
    for(int i=1;i<=n;i++)
        scanf("%lld",&data[i]);
    printf("%lld\n",dfs(1,n));
    print(1,n);
}

P1040 加分二叉树

标签:ref   class   include   span   source   scan   algo   https   printf   

原文地址:https://www.cnblogs.com/Lance1ot/p/9069430.html

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