链接

归属树形DP  做着更像记忆化

DP很好做 就是那个输出路径恶心了。。改代码 从60多行改到120多行。。dp从1维加到三维。。

先类似记忆化搜索整棵树 枚举以i为根节点的最大值 子树类似

求完最大值 再递归搜一下前序 这题不记忆化会超时

 #include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
using namespace std;
#define LL long long
LL dp[][][],a[];
int n,path[],to;
LL dfs(int root,int l,int r)
{
if(dp[root][l][r])
return dp[root][l][r];
if(l==r)
return dp[root][l][r] = a[l];
int i,j;
LL tt =;
if(l==root)
{
for(i = root+ ; i <= r ; i++)
tt = max(tt,dfs(i,root+,r)+a[root]);
}
else if(r==root)
{
for(i = l ; i < root ; i++)
tt = max(tt,dfs(i,l,root-)+a[root]);
}
else
{
for(i = l; i < root ; i++)
for(j = root+ ; j <= r; j++)
{
LL s1 = dfs(i,l,root-);
LL s2 = dfs(j,root+,r);
tt = max(tt,s1*s2+a[root]);
}
}
return dp[root][l][r]=tt;
}
void find(int u,int l,int r,int v)
{
int i,j,x1,x2;
if(l==r)
return ;
int f = ;
if(u==l)
{
for(i = u+ ; i <= r ; i++)
if(dp[i][u+][r]+a[u]==dp[u][l][r])
{
x1 = i;
break;
}
path[v+] = x1;
find(x1,u+,r,v+);
}
else if(u==r)
{
for(i = l ; i < u ; i++)
if(dp[i][l][u-]+a[u]==dp[u][l][r])
{
x1 = i;
break;
}
path[v+] = x1;
find(x1,l,u-,v+);
}
else
{
for(i = l; i < u ; i++)
{
for(j = u+; j <= r ;j++)
if(dp[i][l][u-]*dp[j][u+][r]+a[u]==dp[u][l][r])
{
x1 = i;
x2 = j;
f = ;
break;
}
if(f) break;
}
path[v+] = x1;
path[v++u-l] = x2;
find(x1,l,u-,v+);
find(x2,u+,r,v++u-l);
}
}
int main()
{
int i;
cin>>n;
for(i = ; i <= n ; i++)
cin>>a[i];
LL ans = ;
for(i = ; i <= n ; i++)
{
LL s = dfs(i,,n);
if(s>ans)
{
ans =s;
path[] = i;
}
}
cout<<ans<<endl;
find(path[],,n,);
for(i = ; i < n ; i++)
cout<<path[i]<<" ";
cout<<path[n]<<endl;
return ;
}

VJP1100 加分二叉树(树形DP)的更多相关文章

  1. 洛谷P1040 加分二叉树(区间dp)

    P1040 加分二叉树 题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为节点编号.每个节点都有一个分数(均为正整数),记第i个节点的分数为di, ...

  2. 【BZOJ-1864】三色二叉树 树形DP

    1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 659  Solved: 469[Submit][Status] ...

  3. 【BZOJ1864】[Zjoi2006]三色二叉树 树形DP

    1864: [Zjoi2006]三色二叉树 Description Input 仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次表示最多和最 ...

  4. [luogu2585 ZJOI2006] 三色二叉树 (树形dp)

    传送门 Description Input 输入文件名:TRO.IN 输入文件仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件名:TRO.OUT 输出文件也只有一行,包 ...

  5. cogs 106. [NOIP2003] 加分二叉树(区间DP)

    106. [NOIP2003] 加分二叉树 ★☆   输入文件:jfecs.in   输出文件:jfecs.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 设 一个 n ...

  6. [程序员代码面试指南]二叉树问题-找到二叉树中的最大搜索二叉树(树形dp)

    题意 给定一颗二叉树的头节点,已知所有节点的值都不一样,找到含有节点最多的搜索二叉子树,并返回这个树的头节点. 题解 在后序遍历过程中实现. 求解步骤按树形dp中所列步骤.可能性三种:左子树最大.右子 ...

  7. 洛谷 P2585 [ ZJOI 2006 ] 三色二叉树 —— 树形DP

    题目:https://www.luogu.org/problemnew/show/P2585 首先,三色其实记录两种状态:是绿色,不是绿色 即可,因为红蓝可以随意取反: 一开始因为懒得还原出树,所以写 ...

  8. [Swust OJ 360]--加分二叉树(区间dp)

    题目链接:http://acm.swust.edu.cn/problem/360/ Time limit(ms): 1000 Memory limit(kb): 65535   Description ...

  9. P1040 加分二叉树 区间dp

    题目描述 设一个nn个节点的二叉树tree的中序遍历为(1,2,3,…,n1,2,3,…,n),其中数字1,2,3,…,n1,2,3,…,n为节点编号.每个节点都有一个分数(均为正整数),记第ii个节 ...

随机推荐

  1. javascript 第26节 jQuery对象

    <html> <head> <title>jQuery</title> <!--导入jquery库--> <script type=& ...

  2. java多线程之停止线程

    /*1.让各个对象或类相互灵活交流2.两个线程都冻结了,就不能唤醒了,因为根据代码要一个线程活着才能执行唤醒操作,就像玩木游戏3.中断状态就是冻结状态4.当主线程退出的时候,里面的两个线程都处于冻结状 ...

  3. 学习笔记---C++虚函数,纯虚函数

    1 .虚函数 假设people是man的父类,people类和man类都定义了实函数walk() people* p = new man(); p->walk(); 这里P执行的是people类 ...

  4. [转载]《STL源码剖析》阅读笔记之 迭代器及traits编程技法

    本文从三方面总结迭代器   迭代器的思想   迭代器相应型别及traits思想   __type_traits思想 一 迭代器思想 迭代器的主要思想源于迭代器模式,其定义如下:提供一种方法,使之能够依 ...

  5. SSH+Ajax实现用户名重复检查(一)

    1.struts.xml设置 <package name="default" namespace="/" extends="json-defau ...

  6. Educational Codeforces Round 7 F - The Sum of the k-th Powers 拉格朗日插值

    The Sum of the k-th Powers There are well-known formulas: , , . Also mathematicians found similar fo ...

  7. 分享零基础学习Hadoop方法

    (我不是Hadoop专家,也只是一个初学者,这里我也只是就自己的学习体会,站在初学者的角度谈一下如何入门.) 首先我觉得应该思考这样一个问题:Hadoop对于我们来讲,是一种工具,那么Hadoop帮助 ...

  8. oracle常用SQL语句(汇总版)

    Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, ...

  9. hive 存储格式

    hive有textFile,SequenceFile,RCFile三种文件格式. textfile为默认格式,建表时不指定默认为这个格式,导入数据时会直接把数据文件拷贝到hdfs上不进行处理. Seq ...

  10. qt 5 小练习 创建无边框界面

    我们大家都知道QT5 自带的界面不是那么美观,并且每个软件我们都发现他们的边框是自定义的,所以我决定写一篇这样的博文,也许已经有许许多多篇大牛写的论文了,但我还是想写一篇记录自己的学习QT的历程 首先 ...