bzoj1564: [NOI2009]二叉查找树
首先先说明一个坑点,这里说数不能重复,但是数又可以取全体实数,而且修改代价又和数没有关系,那么我们其实可以直接看成整数的。。。
然后我们是知道中序遍历的:)
所以我们可以区间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]二叉查找树相关推荐
- Noip前的大抱佛脚----赛前任务
赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...
- [颓废史]蒟蒻的刷题记录
QAQ蒟蒻一枚,其实我就是来提供水题库的. 以下记录从2016年开始. 1.1 1227: [SDOI2009]虔诚的墓主人 树状数组+离散化 3132: 上帝造题的七分钟 树状数组 二维区间加减+查 ...
- 【树型DP】BZOJ1564 二叉查找树(noi2009)
标签: 二叉查找树 [题目描述] 已知一棵特殊的二叉查找树.根据定义,该二叉查找树中每个结点的数据值都比它左儿子结点的数据值大,而比它右儿子结点的数据值小. 另一方面,这棵查找树中每个结点都有一个权值 ...
- 数据结构笔记--二叉查找树概述以及java代码实现
一些概念: 二叉查找树的重要性质:对于树中的每一个节点X,它的左子树任一节点的值均小于X,右子树上任意节点的值均大于X. 二叉查找树是java的TreeSet和TreeMap类实现的基础. 由于树的递 ...
- 普通二叉树、二叉查找树、平衡二叉树常见操作汇总
目录 总览表 普通二叉树 二叉查找树 平衡二叉树 总览表 普通二叉树 struct Node{int data;Node* lchild,rchild; };Node* newNode(int v){ ...
- c#数据结构———二叉查找树
using System;<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...
- 动态规划-最优二叉查找树
1.先来看一下最优二叉树: 2.举个例子: 平局比较次数: 计算比较的平均次数: 3.其中最主要的推导公式: 其中:C[i][j]表示二叉查找树T(i,j)的平均比较次数:R[i][j]表示二叉查找树 ...
- 学习数据结构 二叉查找树(binary search tree)
2019独角兽企业重金招聘Python工程师标准>>> 为学习 LLVM 的 ImmutableSet,其底层的实现选择为 AVL 树(平衡二叉搜索树),我不很熟悉该树,虽然大致知道 ...
- DP之最优二叉查找树
前面说过动态规划最典型的就是解决最优化问题的(具有最优子结构的最优化问题),最优二叉查找树就是一个典型的最优化问题. 问题描述: 给定一个n元素的中序序列,它可以有卡特兰数个不同形状的二叉排序树.(卡 ...
最新文章
- 自己动手写cpu pdf_自己动手写 Promise
- 2018-4-8模拟退火算法
- sql leftjoin from a,b区别
- 糊涂虫 php,糊涂虫 hat folgende Bedeutung
- python八大选择排序_python之八大排序方法
- JavaScript下的进制转换
- Java 读取excl
- 晨光文具卖出去的笔能绕地球几圈?
- Can't use Subversion command line client:svn
- 开源应自由!Apache、OpenStack 基金会权威回应美国出口管制
- Linux 信号详解五(信号阻塞,信号未决)
- zen of python什么意思_Zen of Python
- Oracle掌管权限和角色
- 关于Alipay支付宝接口(Java版)下
- joomla人人登录
- win10卸载软件_一款适合于windows端的卸载神器 彻底清理残留软件
- sklearn基于轮廓系数来选择n_clusters
- 51Nod 1629 B君的圆锥 c/c++题解
- 护网必备技能:Spring Boot 接口数据加解密 功能实现
- QT QVectorQPairQString, qint64 qSort 排序
热门文章
- php 获取用户的IP、地址、来源
- java编程思想第四版第十章总结
- bzoj 2406: 矩阵 ——solution
- web API简介(二):客户端储存之document.cookie API
- elasticsearch的映射(mapping)和分析(analysis)
- require js define 函数
- ios 判断app程序第一次启动方法
- OpenCV中CvArr* 的含义~
- linux shell 脚本练习,shell脚本小练习
- 华北理工大学轻工学院计算机在哪个校区,如何坐公交去路北区的华北理工大学轻工学院(北校区)-行政综合楼| Moovit...