noi 2009 二叉查找树 动态规划
思路:
先把权值离散化
按数据值排序
sum[i]为前i个节点频度和
dp[i][j][w]表示把节点[i,j]合并成一颗根节点权值不小于w的子树所需的访问代价与修改代价的最小和
dp[i][j][w]=min(dp[i][k-1][w]+dp[k+1][j][w]+sum[j]-sum[i-1]+K,dp[i][k-1][a[k].weight]+dp[k+1][j][a[k].weight]+sum[j]-sum[i-1](a[k].weight>=w))
(i<=k<=j)
ans=dp[1][n][1];
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 #include<map> 6 #include<algorithm> 7 using namespace std; 8 #define MAXN 80 9 #define INF 987654321 10 int n,m; 11 struct node 12 { 13 int key,weight,frequence; 14 }a[MAXN]; 15 int sum[MAXN]; 16 int dp[MAXN][MAXN][MAXN]; 17 bool cmp1(const node &A,const node &B) 18 { 19 return A.weight<B.weight; 20 } 21 bool cmp2(const node &A,const node &B) 22 { 23 return A.key<B.key; 24 } 25 int main() 26 { 27 memset(dp,0,sizeof(dp)); 28 scanf("%d%d",&n,&m); 29 int i,j,k,w,t; 30 for(i=1;i<=n;i++) 31 scanf("%d",&a[i].key); 32 for(i=1;i<=n;i++) 33 scanf("%d",&a[i].weight); 34 for(i=1;i<=n;i++) 35 scanf("%d",&a[i].frequence); 36 sort(a+1,a+n+1,cmp1); 37 for(i=1;i<=n;i++) 38 a[i].weight=i; 39 sort(a+1,a+n+1,cmp2); 40 sum[0]=0; 41 for(i=1;i<=n;i++) 42 sum[i]=sum[i-1]+a[i].frequence; 43 for(i=1;i<=n;i++) 44 for(j=1;j<=n;j++) 45 { 46 if(a[i].weight>=j) 47 dp[i][i][j]=a[i].frequence; 48 else 49 dp[i][i][j]=a[i].frequence+m; 50 } 51 for(w=n;w>=1;w--) 52 for(t=1;t<n;t++) 53 for(i=1;i+t<=n;i++) 54 { 55 j=i+t; 56 int s=INF; 57 for(k=i;k<=j;k++) 58 { 59 s=min(s,dp[i][k-1][w]+dp[k+1][j][w]+sum[j]-sum[i-1]+m); 60 if(a[k].weight>=w) 61 s=min(s,dp[i][k-1][a[k].weight]+dp[k+1][j][a[k].weight]+sum[j]-sum[i-1]); 62 } 63 dp[i][j][w]=s; 64 } 65 int s=INF; 66 printf("%d\n",dp[1][n][1]); 67 return 0; 68 }
转载于:https://www.cnblogs.com/myoi/archive/2012/07/16/2592942.html
noi 2009 二叉查找树 动态规划相关推荐
- 【NOI 2009】诗人小G
[NOI 2009]诗人小G Problem Description 小 \(G\) 是一个出色的诗人,经常作诗自娱自乐.但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对 ...
- NOI 2.6 动态规划 6045:开餐馆
题目来源:http://noi.openjudge.cn/ch0206/6045/ 6045:开餐馆 总时间限制: 1000ms 内存限制: 65536kB 描述 北大信息学院的同学小明毕业之后打 ...
- NOI 4.5 动态规划 1980: 陪审团的人选
题目来源:http://noi.openjudge.cn/ch0405/1980/ 1980: 陪审团的人选 总时间限制: 1000ms 内存限制: 65536kB 描述 在遥远的国家佛罗布尼亚 ...
- NOI 2009 题解
变换序列 (传送门) 题意 对于0-N-1共N个整数,给一个距离序列D0-DN-1,定义一个变换序列T0-TN-1使得每个i,Ti的环上距离等于Di.一个合法的变换序列应是0-N-1的一个排列,任务是 ...
- 最优二叉查找树—动态规划C++
最优二叉查找树 一.问题描述 二.动态规划算法解题思路 三.解题思路图形化 四.思考:为什么输入概率相同(无序),输出结果不一样 流程图 实例 示例代码 一.问题描述 1.问题描述: 基于统计先验知识 ...
- CSP-J NOIP NOI数学与动态规划
NOIP数学 NOIp数学_M_oisture的博客-CSDN博客_noip数学 https://www.cnblogs.com/zzyh/p/7241897.html [总结]noip数学汇总 [总 ...
- NOI 4.5 动态规划 4979:海贼王之伟大航路(深搜剪枝)
题目来源:http://noi.openjudge.cn/ch0405/4979/ 4979:海贼王之伟大航路 总时间限制: 1000ms 内存限制: 65536kB 描述 "我是要成为海贼 ...
- 省选+NOI 第一部分 动态规划DP
期望概率DP [整理]简单的数学期望和概率DP [整理]简单的数学期望和概率DP - nimphy - 博客园 期望&概率dp总结 期望&概率dp总结_十分残念的博客-CSDN博客 期 ...
- POJ-2155 Matrix 二维线段树 | 树状数组
题目链接:http://poj.org/problem?id=2155 比较典型的二维线段树题目,直接永久更新即可,在询问的时候,要询问每个x区间的子树,复杂度O(log(n)^2). 也可以用树状数 ...
最新文章
- Ubuntu 16.04 install NVDIA display driver
- 与微信、APP正面刚?三大运营商联合发布5G消息白皮书
- 完全搞懂傅里叶变换和小波(3)——泰勒公式及其证明
- 关于React-native的介绍以及环境搭建
- jquery.validate
- IDC:无线数字化转型持续进行 第二季度全球企业WLAN市场强劲增长
- mysql centos_centos7mysql安装
- springcloud之config配置中心
- Dism++ 一款传说中的系统工具,使用简介
- C++ 读取和写入txt文件
- ML之SHAP:机器学习可解释性之SHAP值之理解单样本单特征预测
- 乾颐堂安德华为数通HCNA真题解析版(第2部分)
- 浏览器提示网站证书过期或还未生效
- php 变量 打字费劲,电脑自己打字停不下来
- 灰狼算法(GWO)优化长短期记忆神经网络的数据回归预测,GWO-LSTM回归预测,多输入单输出模型。
- Revit开发之载入族的创建小技巧
- 各种OJ网站,刷题必备
- font-family、font-style、font-weight、font-variant的区别「In CSS」
- 计算机专业英语谐音读法,英语48个音标中文谐音读法大全
- 电信网通的IP地址分布
热门文章
- php查找以xx结尾的的字符串单词,Javascript中查找不以XX字符结尾的单词示例代码_javascript技巧...
- php get 数据类型,PHP基础-数据类型-integet
- express html文件接收路由参数,express 获取post 请求参数
- sed mysql配置文件_shell解析my.cnf配置文件
- HTML+CSS+JS实现 ❤️520爱心背景表白网页动画特效❤️
- mysql sphinx 中文搜索_sphinx+mysql+mmseg 实现中文全站搜索 安装配置文档
- java从数组中删除元素(数组的缩容)
- java中.of,java中instanceof的用法
- Spring基于Annotation装配Bean
- Java字符流的使用