树形dp/记忆化搜索

首先可以看出树形dp,因为第一个问题并不需要知道子树的样子,

然而第二个输出前序遍历,必须知道每个子树的根节点,需要在树形dp过程中记录,递归输出

那么如何求最大加分树——根据中序的特征,想到以枚举根结点为起点
那么轻易得出如果根结点的编号为x,那么左子树的结点有1~x-1,右子树 结点有x+1~n
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,d[];
int f[][];
int rt[][];
int dfs(int l,int r){
if(l>r)return ;//无儿子
if(l==r){
rt[l][r]=l;return d[l];
}
if(f[l][r])return f[l][r];
int ans=,root;
for(int i=l;i<=r;i++){//枚举根
int tmp=dfs(l,i-)*dfs(i+,r)+d[i];
if(tmp>ans){
ans=tmp;
root=i;//根
}
}
rt[l][r]=root;
f[l][r]=ans;
return ans;
}
void print(int l,int r){
if(l>r)return;
printf("%d ",rt[l][r]);
print(l,rt[l][r]-);
print(rt[l][r]+,r);
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&d[i]);
printf("%d\n",dfs(,n));
print(,n);
}

最新文章

  1. xml Schema 基础
  2. Ms sql行转列。汇总
  3. python安装pycrypto报错error: command &#39;x86_64-linux-gnu-gcc&#39; failed with exit status 1
  4. iOS:详细的正则表达式
  5. 【转】介绍几个图论和复杂网络的程序库 —— BGL,QuickGraph,igraph和NetworkX
  6. Sublime Text 中文乱码解决方案
  7. akoj-1272-字母统计
  8. Luogu P1576 最小花费
  9. c# 第一节课 一些简单的应用
  10. java swing中Timer类的学习
  11. Robotframework自动化系统:筛选结果数量统计
  12. 使用XML设计某大学主页站点地图--ASP.NET
  13. BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集
  14. Centos 搭建邮箱系统
  15. CVTE C/C++开发工程师笔试题(一)
  16. 口试Linq题
  17. 为laravel队列安装supervisor并配置
  18. ubuntu系列-安装jdk以及eclipse(for C++)
  19. Java面试题精选
  20. luoguP4000 斐波那契数列

热门文章

  1. bzoj 2300: [HAOI2011]防线修建 凸包
  2. Oracle 12C 新特性之在线重命名、迁移活跃的数据文件
  3. node-webkit开发基本步骤
  4. POJ1995:Raising Modulo Numbers
  5. n文件的上传和下载,struts2和springmvc
  6. 办公软件-Excel:Microsoft Office Excel 2003百科
  7. js比较日期字串的大小
  8. sharepoint SDDL 字符串包含无效的SID或无法转换的SID
  9. github的简单操作
  10. 菜鸟大充电啦啦啦啦啦:eclipse SDK 是什么啊