首先先说明一个坑点,这里说数不能重复,但是数又可以取全体实数,而且修改代价又和数没有关系,那么我们其实可以直接看成整数的。。。

然后我们是知道中序遍历的:)

所以我们可以区间DP一下,设f[i][j][k]表示i~j建成一棵子树,根的大小大于(否则值不变的时候只会影响1个点,答案没有单调性求值复杂,还要多一个n的复杂度)等于k的方案数

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;int n,K;
struct node{int p,d,v;}a[110];int lslen,ls[110];LL sv[110];
bool cmp(node n1,node n2){return n1.p<n2.p;}
LL f[110][110][110];
LL dfs(int l,int r,int d)
{if(l>r)return 0;if(f[l][r][d]!=f[0][0][0])return f[l][r][d];for(int i=l;i<=r;i++){f[l][r][d]=min(f[l][r][d],dfs(l,i-1,d)+dfs(i+1,r,d)+K);if(a[i].d>=d)f[l][r][d]=min(f[l][r][d],dfs(l,i-1,a[i].d+1)+dfs(i+1,r,a[i].d+1));}f[l][r][d]+=(sv[r]-sv[l-1]);return f[l][r][d];
}int main()
{scanf("%d%d",&n,&K);for(int i=1;i<=n;i++)scanf("%d",&a[i].p);for(int i=1;i<=n;i++)scanf("%d",&a[i].d);for(int i=1;i<=n;i++)scanf("%d",&a[i].v);sort(a+1,a+n+1,cmp);lslen=0;sv[0]=0;for(int i=1;i<=n;i++)ls[++lslen]=a[i].d,sv[i]=sv[i-1]+a[i].v;sort(ls+1,ls+lslen+1);lslen=unique(ls+1,ls+lslen+1)-ls-1;for(int i=1;i<=n;i++)a[i].d=lower_bound(ls+1,ls+lslen+1,a[i].d)-ls;memset(f,63,sizeof(f));printf("%lld\n",dfs(1,n,1));return 0;
}

转载于:https://www.cnblogs.com/AKCqhzdy/p/9879317.html

bzoj1564: [NOI2009]二叉查找树相关推荐

  1. Noip前的大抱佛脚----赛前任务

    赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...

  2. [颓废史]蒟蒻的刷题记录

    QAQ蒟蒻一枚,其实我就是来提供水题库的. 以下记录从2016年开始. 1.1 1227: [SDOI2009]虔诚的墓主人 树状数组+离散化 3132: 上帝造题的七分钟 树状数组 二维区间加减+查 ...

  3. 【树型DP】BZOJ1564 二叉查找树(noi2009)

    标签: 二叉查找树 [题目描述] 已知一棵特殊的二叉查找树.根据定义,该二叉查找树中每个结点的数据值都比它左儿子结点的数据值大,而比它右儿子结点的数据值小. 另一方面,这棵查找树中每个结点都有一个权值 ...

  4. 数据结构笔记--二叉查找树概述以及java代码实现

    一些概念: 二叉查找树的重要性质:对于树中的每一个节点X,它的左子树任一节点的值均小于X,右子树上任意节点的值均大于X. 二叉查找树是java的TreeSet和TreeMap类实现的基础. 由于树的递 ...

  5. 普通二叉树、二叉查找树、平衡二叉树常见操作汇总

    目录 总览表 普通二叉树 二叉查找树 平衡二叉树 总览表 普通二叉树 struct Node{int data;Node* lchild,rchild; };Node* newNode(int v){ ...

  6. c#数据结构———二叉查找树

    using System;<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...

  7. 动态规划-最优二叉查找树

    1.先来看一下最优二叉树: 2.举个例子: 平局比较次数: 计算比较的平均次数: 3.其中最主要的推导公式: 其中:C[i][j]表示二叉查找树T(i,j)的平均比较次数:R[i][j]表示二叉查找树 ...

  8. 学习数据结构 二叉查找树(binary search tree)

    2019独角兽企业重金招聘Python工程师标准>>> 为学习 LLVM 的 ImmutableSet,其底层的实现选择为 AVL 树(平衡二叉搜索树),我不很熟悉该树,虽然大致知道 ...

  9. DP之最优二叉查找树

    前面说过动态规划最典型的就是解决最优化问题的(具有最优子结构的最优化问题),最优二叉查找树就是一个典型的最优化问题. 问题描述: 给定一个n元素的中序序列,它可以有卡特兰数个不同形状的二叉排序树.(卡 ...

最新文章

  1. 自己动手写cpu pdf_自己动手写 Promise
  2. 2018-4-8模拟退火算法
  3. sql leftjoin from a,b区别
  4. 糊涂虫 php,糊涂虫 hat folgende Bedeutung
  5. python八大选择排序_python之八大排序方法
  6. JavaScript下的进制转换
  7. Java 读取excl
  8. 晨光文具卖出去的笔能绕地球几圈?
  9. Can't use Subversion command line client:svn
  10. 开源应自由!Apache、OpenStack 基金会权威回应美国出口管制
  11. Linux 信号详解五(信号阻塞,信号未决)
  12. zen of python什么意思_Zen of Python
  13. Oracle掌管权限和角色
  14. 关于Alipay支付宝接口(Java版)下
  15. joomla人人登录
  16. win10卸载软件_一款适合于windows端的卸载神器 彻底清理残留软件
  17. sklearn基于轮廓系数来选择n_clusters
  18. 51Nod 1629 B君的圆锥 c/c++题解
  19. 护网必备技能:Spring Boot 接口数据加解密 功能实现
  20. QT QVectorQPairQString, qint64 qSort 排序

热门文章

  1. php 获取用户的IP、地址、来源
  2. java编程思想第四版第十章总结
  3. bzoj 2406: 矩阵 ——solution
  4. web API简介(二):客户端储存之document.cookie API
  5. elasticsearch的映射(mapping)和分析(analysis)
  6. require js define 函数
  7. ios 判断app程序第一次启动方法
  8. OpenCV中CvArr* 的含义~
  9. linux shell 脚本练习,shell脚本小练习
  10. 华北理工大学轻工学院计算机在哪个校区,如何坐公交去路北区的华北理工大学轻工学院(北校区)-行政综合楼| Moovit...