首页 > 其他分享 >P1040 [NOIP2003 提高组] 加分二叉树

P1040 [NOIP2003 提高组] 加分二叉树

时间:2022-09-29 11:36:10浏览次数:47  
标签:cout NOIP2003 int memset 33 P1040 二叉树

区间dp好题!

在更新 \(f[i][j]\) 时,顺便记录 该子树的根节点 \(g[i][j]\) 。

最后递归求解。

#include<bits/stdc++.h>
using namespace std;
class solve{
	public:
		int n;
		int g[33][33];
		int f[33][33];
		void dfs(int l,int r)
		{
			if(l==r){
				cout<<l<<" ";
				return;
			}
			if(l>r)return;
			cout<<g[l][r]<<" ";
			dfs(l,g[l][r]-1);
			dfs(g[l][r]+1,r);
		}
		void main()
		{
			cin>>n;
			memset(f,0,sizeof(f));
			for(int i=1; i<=n; i++)
				cin>>f[i][i];
			memset(g,0,sizeof(g));
			for(int len=1; len<n; len++){
				for(int i=1; i+len<=n; i++){
					int j=i+len;
					for(int k=i; k<=j; k++){
						if(f[k][k]+(f[k+1][j]==0?1:f[k+1][j])*(f[i][k-1]==0?1:f[i][k-1])>f[i][j])
						{
							f[i][j]=f[k][k]+(f[k+1][j]==0?1:f[k+1][j])*(f[i][k-1]==0?1:f[i][k-1]);
							g[i][j]=k;
						}
					}
				}
			}
			cout<<f[1][n]<<endl;
			dfs(1,n);
		}
}x;
int main()
{
	x.main();
}

标签:cout,NOIP2003,int,memset,33,P1040,二叉树
From: https://www.cnblogs.com/dadidididi/p/16740862.html

相关文章

  • 二叉树 Leecode总结
    Leecode107:层序遍历,从叶子节点到根节点正常的层序遍历之后,对resList进行反转,调用Collections.reverse(resList);或者每次添加list时,从resList的头部开始添加clas......
  • 二叉树的前中后序遍历的两种方法
    前中后序遍历的记忆方式:前中后可以记为中间节点的顺序位置,如:前序遍历:中左右;中序遍历:左中右;后续遍历:左右中。//前序遍历:算法实现:前序遍历顺序为中左右。需要传......
  • 二叉树前中后序遍历的两种方式
    前中后序遍历的记忆方式:前中后可以记为中间节点的顺序位置,如:前序遍历:中左右;中序遍历:左中右;后续遍历:左右中。//前序遍历:算法实现:前序遍历顺序为中左右。需要传......
  • luogu P1043 [NOIP2003 普及组] 数字游戏
    [NOIP2003普及组]数字游戏题目描述丁丁最近沉迷于一个数字游戏之中。这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容......
  • leetcode 617. Merge Two Binary Trees 合并二叉树(简单)
    一、题目大意给你两棵二叉树:root1和root2。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉......
  • 二叉树遍历
    前序遍历A->C->D->E->F->H->G->Bvoidtraversal(Node*node){if(!node->left&&node->right){res.push_back(node);return;)if(node->left)traversal(nod......
  • 今日部分知识点总结———SQL注入,hooks的优缺点,cookies,xxxStorage的区别,BFC,合并二叉
    SQL注入在浏览器页面用户提交数据处,输入特定的字符实现sql语句的篡改,从而对数据库进行操作。比如在一个登录界面,要求输入用户名和密码,可以这样输入实现免帐号登录;用户名......
  • 二叉树的遍历方式(创建,遍历,执行)
    //binarytree.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。//#include<iostream>usingnamespacestd;typedefstructNODE{charch;N......
  • 线索化二叉树
    将数列{1,3,6,8,10,14}构建成一颗二叉树问题分析当我们对上面的二叉树进行中序遍历时,数列为{8,3,10,1,6,14}但是6,8,10,14这几个节点的左右......
  • 顺序存储二叉树
    简介从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组特点顺序二叉树通常只考虑完全二叉树第n个元素的左子节点为......