zoukankan      html  css  js  c++  java
  • P1040 加分二叉树

    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
    ",dfs(1,n));
    	print(1,n);
    }
    
  • 相关阅读:
    python调用ggsci.exe程序
    confluence安装
    nginx优化
    ELKstack搭建
    zabbix 安装
    python requests
    小程序消息推送
    shell
    rar 解压
    ubuntu 安装部分设置U盘启动系统安装盘操作
  • 原文地址:https://www.cnblogs.com/Lance1ot/p/9069430.html
Copyright © 2011-2022 走看看