链接P1864 [NOI2009]二叉查找树

  • 这题还是蛮难的……是我菜。
  • 题目描述中的一大堆其实就是在描述\(treap.\),考虑\(treap\)的一些性质:
  • 首先不管怎么转,中序遍历是确定的,所以先按照数据值排序,变成序列问题。
  • 其次是父亲的权值比儿子小,但是这是个相对关系,所以对权值离散。
  • 问题变成了对一个中序构造一棵树使得满足\(treap\)的第二条性质。
  • 设\(f_{l,r,v}\)表示区间\(l,r\),最小权值大于等于\(v\)的最小代价,这种状态的好处在于我们可以快速知道一段序列的父亲应该最小要多大才可以,因为父亲的权值是一定小于所有儿子的,所以小于等于\(v\)就可以了。
  • 转移首先有:$$

    f_{l,r,v}=min(f_{l,p-1,v}+f_{p+1,r,v}+K+P);$$
  • 其中\(K\)是一次修改代价,\(P\)是区间和,\(p\)是枚举的父亲。
  • 这里是强制修改当前权值了。
  • 然后如果\(v_p>=v\),有$$f_{l,r,v}=min(f_{l,p-1,vl}+f_{p+1,r,vl}+P);$$
  • 其中\(vl\)是\(p\)点权值。
  • 考虑一下边界即可,注意如果\(l>r\)则\(f_{l,r,v}=0\)
#include<bits/stdc++.h>
#define R register int
#define ll long long
using namespace std;
const int N=100;
int n,len,K,O[N];
ll num[N],f[N][N][N],ans;
struct Qs{int id,vl,pd;}w[N];
int cmpid(const Qs &x,const Qs &y){return x.id<y.id;}
int gi(){
R x=0,k=1;char c=getchar();
while((c<'0'||c>'9')&&c!='-')c=getchar();
if(c=='-')k=-1,c=getchar();
while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+c-'0',c=getchar();
return x*k;
}
ll Get(R l,R r,R v){
if(l>r)return 0;
if(f[l][r][v]!=-1)return f[l][r][v];
f[l][r][v]=1e18;ll P=num[r]-num[l-1];
if(l==r){f[l][r][v]=P+((w[l].vl>=v)?0:K);return f[l][r][v];}
for(R p=l;p<=r;++p){
f[l][r][v]=min(f[l][r][v],Get(l,p-1,v)+Get(p+1,r,v)+K+P);
if(w[p].vl>=v)
f[l][r][v]=min(f[l][r][v],Get(l,p-1,w[p].vl)+Get(p+1,r,w[p].vl)+P);
}
return f[l][r][v];
}
int main(){
freopen("s.in","r",stdin);
n=gi(),K=gi(),ans=1e18;
for(R i=1;i<=n;++i)w[i].id=gi();
for(R i=1;i<=n;++i)
w[i].vl=gi(),O[++len]=w[i].vl;
for(R i=1;i<=n;++i)w[i].pd=gi();
sort(w+1,w+n+1,cmpid);
sort(O+1,O+len+1),len=unique(O+1,O+len+1)-O-1;
for(R i=1;i<=n;++i){
w[i].vl=lower_bound(O+1,O+len+1,w[i].vl)-O;
num[i]=num[i-1]+w[i].pd;
}
memset(f,-1,sizeof(f));
for(R i=1;i<=len;++i)ans=min(ans,Get(1,n,i));
printf("%lld\n",ans);
return 0;
}

P1864 [NOI2009]二叉查找树的更多相关文章

  1. [洛谷P1864] NOI2009 二叉查找树

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

  2. 洛谷$P1864\ [NOI2009]$二叉查找树 区间$dp$

    正解:区间$dp$ 解题报告: 传送门$QwQ$ 首先根据二叉查找树的定义可知,数据确定了,这棵树的中序遍历就已经改变了,唯一能改变的就是通过改变权值从而改变结点的深度. 发现这里权值的值没有意义,所 ...

  3. Luogu P1864 [NOI2009]二叉查找树

    题目 \(v\)表示权值,\(F\)表示频率. 首先我们显然可以把这个权值离散化. 然后我们想一下,这个东西它是一棵树对吧,但是我们改变权值会引起其树形态的改变,这样很不好做,所以我们考虑把它转化为序 ...

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

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

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

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

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

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

  7. 题解 P1864 【[NOI2009]二叉查找树】

    #include<cstdio> #include<string> #include<cstring> #include<iostream> #incl ...

  8. NOI2009 二叉查找树 【区间dp】

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

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

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

随机推荐

  1. 基于python实现自动化办公学习笔记四

    PPT(1)写PPT import win32comimport win32com.client def makeppt(path): ppt = win32com.client.Dispatch(& ...

  2. php 判断访问是否是手机或者pc

    php代码 function isMobile() { $user_agent = $_SERVER['HTTP_USER_AGENT']; $mobile_agents = Array(" ...

  3. 最近使用的两个工具 winscp和xshell

    最近在编译MONO源码时用到了这两个工具,感觉挺好,记录备忘 WINSCP 长这样 用于可视化的查看和操作远程服务器上的文件 xshell用于命令行下操作远程服务器,服务器的同学好多在用这个.命令行是 ...

  4. ORA-20011

    Sun Jul 23 22:09:07 2017DBMS_STATS: GATHER_STATS_JOB encountered errors. Check the trace file.Errors ...

  5. win10蓝屏1

    win10一直蓝屏. 事件查看里有系统错误提示 DCOM部分组件错误,表现为:应用程序-特定 权限设置并未向在应用程序容器 不可用 SID (不可用)中运行的地址 LocalHost (使用 LRPC ...

  6. 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第8节 Math类_19_Math练习:小学数学真题

    题目 画数轴 解题思路 强转成int类型就会舍弃小数位数 输出最终的数量 如果用Math.ceil的方式的话

  7. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_03 过滤器_1_FileFilter过滤器的原理和使用

    FileFilter 需要先定义接口的实现类.并重写过滤的方法 使用 并没有起作用 过滤器的原理 缺少了a.java和b.java 如果是文件夹,就返回true,那么就会返回到Files[]数组中.然 ...

  8. centos 7 lnmp环境编译安装zabbix-3.4.14

    一.安装环境(zabbix3.0需要php在5.5版本以上) [root@localhost ~]# cat /etc/redhat-release CentOS Linux release (Cor ...

  9. Oracle删除表时候有外键 不能删除

    SELECT    A .constraint_name,    A .table_name,    b.constraint_nameFROM    user_constraints A,    u ...

  10. clinical-逻辑核查数据的操作

    1. 前端页面样式 2. 前端代码 添加: 展示: 修改 删除 3. 后台代码 封装的DAO类数据 # coding: utf-8 from pdform.services.db.dbCore imp ...