zoukankan      html  css  js  c++  java
  • rnqoj-49-加分二叉树-(区域动归+记忆化)

    区域动归的问题

    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n;
    int a[51];
    int vis[51][51];
    int num[51][51];
    int dll(int l,int r)
    {
        int i;
        if(num[l][r]!=-1)return num[l][r];
        if(l>r)
        {
            return 1;
        }
        if(l==r)
        {
            num[l][r]=a[l];
            vis[l][r]=l;
            return a[l];
        }
        int as=0;
        for(i=l;i<=r;i++)
        {
            int t=0;
            t=dll(l,i-1)*dll(i+1,r)+a[i];
            if(as<t)
            {
                vis[l][r]=i;
                as=t;
            }
        }
        num[l][r]=as;
        return as;
    }
    int leap;
    void dos(int l,int r)
    {
        if(vis[l][r]==-1)return ;
        if(leap==0)
        {
            printf("%d",vis[l][r]);
        }
        else
        {
            printf(" %d",vis[l][r]);
        }
        leap++;
        if(l<r)
        {
            dos(l,vis[l][r]-1);
            dos(vis[l][r]+1,r);
        }
    }
    int main()
    {
        int i;
        while(~scanf("%d",&n))
        {
            memset(num,-1,sizeof(num));
            memset(vis,-1,sizeof(vis));
            for(i=1;i<=n;i++)scanf("%d",&a[i]);
            if(dll(1,n));
            cout<<num[1][n]<<endl;
            leap=0;
            dos(1,n);
            cout<<endl;
        }
    }
    


  • 相关阅读:
    空心杯 电机
    scikit learn 安装
    python fromkeys() 创建字典
    python 清空列表
    mac最常用快捷键
    php while循环
    php 获取某个日期n天之后的日期
    php 添加时间戳
    php 格式化时间
    php 数值数组遍历
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3341915.html
Copyright © 2011-2022 走看看