【题目链接】

http://www.lydsy.com/JudgeOnline/problem.php?id=1564

【题意】

给定一个Treap,总代价为深度*距离之和。可以每次以K的代价修改权值,问最小代价。

【思路】

数据值是不变的,因此Treap的中序遍历是唯一的。先将数据按照数据值排序,得到其中序遍历。

  然后将权值离散化到[1,n]区间内。

设f[l][r][w]为区间[l,r]内的权值都比w大时的最小代价,则有转移式:

f[l][r][w]=min { f[l][k-1][w]+f[k+1][r][w]+K+c(l,r) }

       f[l][r][w]=min { f[l][k-1][a[k].w]+f[k+1][r][a[k].w]+c(l,r) },a[k].w>=w

记忆化搜索比较好写lalala

【代码】

 #include<set>
#include<cmath>
#include<queue>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define trav(u,i) for(int i=front[u];i;i=e[i].nxt)
#define FOR(a,b,c) for(int a=(b);a<=(c);a++)
using namespace std; typedef long long ll;
const int N = ;
const int inf = 1e9; struct Node
{
int dat,w,c;
bool operator < (const Node& rhs) const
{
return dat<rhs.dat;
}
} a[N]; int n,K,sumc[N],f[N][N][N];
pair<int,int> b[N]; int dp(int l,int r,int w)
{
int& ans=f[l][r][w];
if(l>r) return ans=;
if(ans!=-) return ans;
ans=inf;
FOR(k,l,r) {
if(a[k].w>=w)
ans=min(ans,dp(l,k-,a[k].w)+dp(k+,r,a[k].w)+sumc[r]-sumc[l-]);
ans=min(ans,dp(l,k-,w)+dp(k+,r,w)+sumc[r]-sumc[l-]+K);
}
return ans;
} int main()
{
// freopen("in.in","r",stdin);
// freopen("out.out","w",stdout);
memset(f,-,sizeof(f));
scanf("%d%d",&n,&K);
FOR(i,,n) scanf("%d",&a[i].dat);
FOR(i,,n) scanf("%d",&a[i].w);
FOR(i,,n) scanf("%d",&a[i].c);
sort(a+,a+n+);
FOR(i,,n)
b[i]=make_pair(a[i].w,i);
sort(b+,b+n+);
FOR(i,,n)
a[b[i].second].w=i,
sumc[i]=sumc[i-]+a[i].c; int ans=inf;
FOR(i,,n)
ans=min(ans,dp(,n,i));
printf("%d",ans);
return ;
}

bzoj 1564 [NOI2009]二叉查找树(树形DP)的更多相关文章

  1. bzoj 1564 [NOI2009]二叉查找树 区间DP

    [NOI2009]二叉查找树 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 906  Solved: 630[Submit][Status][Discu ...

  2. BZOJ 1564: [NOI2009]二叉查找树( dp )

    树的中序遍历是唯一的. 按照数据值处理出中序遍历后, dp(l, r, v)表示[l, r]组成的树, 树的所有节点的权值≥v的最小代价(离散化权值). 枚举m为根(p表示访问频率): 修改m的权值 ...

  3. [BZOJ1564][NOI2009]二叉查找树 树形dp 区间dp

    1564: [NOI2009]二叉查找树 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 879  Solved: 612[Submit][Status] ...

  4. BZOJ 1564 :[NOI2009]二叉查找树(树型DP)

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

  5. BZOJ 1564: [NOI2009]二叉查找树

    链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1564 Description Input Output 只有一个数字,即你所能得到的整棵树的访 ...

  6. Bzoj 1131[POI2008]STA-Station (树形DP)

    Bzoj 1131[POI2008]STA-Station (树形DP) 状态: 设\(f[i]\)为以\(i\)为根的深度之和,然后考虑从他父亲转移. 发现儿子的深度及其自己的深度\(-1\) 其余 ...

  7. BZOJ 4726: [POI2017]Sabota? 树形dp

    4726: [POI2017]Sabota? 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4726 Description 某个公司有n ...

  8. bzoj 2286(虚树+树形dp) 虚树模板

    树链求并又不会写,学了一发虚树,再也不虚啦~ 2286: [Sdoi2011]消耗战 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 5002  Sol ...

  9. BZOJ 4472 [Jsoi2015]salesman(树形DP)

    4472: [Jsoi2015]salesman Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 417  Solved: 192[Submit][St ...

随机推荐

  1. redis哨兵机制一(转)

    概述 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如 master宕机了,Redis本身(包括它的很多客户端) ...

  2. RPM 安装oracle18c 修改字符集的方法

    1. 安装完preinstall 和 oracle 的rpm版本之后 到这个界面 rpm -ivh oracle-database-preinstall-18c-.el7.x86_64.rpm war ...

  3. java 基础 --概念--005

    1,面向对象特征 封装(encapsulation):隐藏对象的属相和访问细节,仅提供对外公共访问方式.继承(inheritance).多态(polymorphism) 2,类:一组相关的属性和行为的 ...

  4. typescript 不用import?

    如果你想用ts文件,而又不想import,export,怎么办呢? 感谢开发者提供的工具.    https://github.com/domchen/typescript-plus.   感想: 仅 ...

  5. day02--Python基础二(基础数据类型)

    一.数据与数据类型 1 什么是数据? x=10,10是我们要存储的数据 2 为何数据要分不同的类型 数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示 3 数据类型 数字(int) 字符串 ...

  6. SPOJ_NSUBSTR

    题目意思是给你一个字符串,f[x]是长度为x的子串中,出现个数最多的那个串的出现次数. 给出原串,依次输出f[1],f[2],……. 后缀自动机.对于某一个状态,right[]值的大小就是出现的次数, ...

  7. Python排序算法动态图形化演示(实现代码)

     1.冒泡排序 冒泡排序是最简单也是最容易理解的排序方法,其原理就是重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是 ...

  8. JS调用App方法及App调用JS方法

    做App内嵌H5项目时,经常会遇到js与App的交互,最普遍的就是方法的互相调用,那么如何实现方法的互相调用呢? 写在前面: 如果只是小项目且后期扩大的可能性不大的时候,可以忽略,可如果是长期项目的话 ...

  9. MT【121】耐克数列的估计

    已知$\{a_n\}$满足$a_1=1,a_2=2,\dfrac{a_{n+2}}{a_n}=\dfrac{a_{n+1}^2+1}{a_n^2+1}$, 求$[a_{2017}]$_____ 解:容 ...

  10. png?wxfrom=5&wx_lazy=1

    作为一名游戏行业的视频&平面设计师,平时的工作就是为公司发行的游戏制作宣传视频.广告.平面宣传图,打交道最多的自然就是Adobe家族的设计软件,Photoshop.AfterEffects.P ...