• luogu P1040 加分二叉树


    题目描述

    设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都有一个加分,任一棵子树subtree(也包含tree本身)的加分计算方法如下:

    subtree的左子树的加分× subtree的右子树的加分+subtree的根的分数。

    若某个子树为空,规定其加分为1,叶子的加分就是叶节点本身的分数。不考虑它的空子树。

    试求一棵符合中序遍历为(1,2,3,…,n)且加分最高的二叉树tree。要求输出;

    (1)tree的最高加分

    (2)tree的前序遍历

    输入输出格式

    输入格式:
    第1行:一个整数n(n<30),为节点个数。

    第2行:n个用空格隔开的整数,为每个节点的分数(分数<100)。

    输出格式:
    第1行:一个整数,为最高加分(结果不会超过4,000,000,000)。

    第2行:n个用空格隔开的整数,为该树的前序遍历。

    输入输出样例

    输入样例#1:

    5
    5 7 1 2 10
    

    输出样例#1: 复制

    145
    3 1 2 4 5
    

    dp[i][j]表示区间i到j所能产生的最大贡献

    #include<cstdio>
    #include<iostream>
    using namespace std;
    const int maxn  =  106;
    int midtree[maxn];
    int n;
    int dp[maxn][maxn];
    inline int read() {
    	int x = 0,f = 1;char c = getchar();
    	while(c < '0' || c > '9') {
    		if(c == '-')f = -1;
    		c = getchar();
    	}
    	while(c <= '9' && c>= '0') x = x*10+c-'0',c = getchar();
    	return x*f;
    }
    int root[42][42];
    void print(int l,int r) {
    	if(l>r)return;
    	if(l==r){
    		printf("%d ",l);
    		return ;
    	}
    	printf("%d ",root[l][r]);
    	int mid=root[l][r];
    	print(l,mid-1);
    	print(mid+1,r);
    }
    int main() {
    	n=read();
    	for(int i=1;i<=n;++i) 
    		midtree[i] = read(),dp[i][i]=midtree[i],root[i][i]=i;
    	for(int i=1;i<=n+1;++i) {
    		dp[i][i-1]=1;
    	}
    	for(int i=n;i>=1;--i) 
    	{
    		for(int j=i+1;j<=n;++j) 
    		{
    			for(int k=i;k<=j;++k) 
    			{
    				if(dp[i][j]<midtree[k]+dp[i][k-1]*dp[k+1][j]) 
    				{
    					root[i][j]=k;
    					dp[i][j]=midtree[k]+dp[i][k-1]*dp[k+1][j];
    				}
     			}
    		}
    	}
    	printf("%d
    ",dp[1][n]);
    	print(1,n);
    	return 0;
    }
    
  • 相关阅读:
    命令行net time同步时间(内网)
    清理树莓派系统垃圾
    树莓派常用功能的安装和使用
    树莓派的媒体播放软件omxplayer
    树莓派安装FTP服务器
    Raspbian 中国软件源
    树莓派挂载和卸载U盘或移动硬盘
    树莓派上搭建NAS
    Aria2+yaaw+Chrome插件BaiduExporter实现百度网盘下载
    树莓派做下载机+Web服务器(Aria2下载+yaaw做UI+nginx)
  • 原文地址:https://www.cnblogs.com/sssy/p/7786521.html
Copyright © 2020-2023  润新知