【HDU】3516 Tree Construction
http://acm.hdu.edu.cn/showproblem.php?pid=3516
题意:平面n个点且满足xi<xj, yi>yj, i<j。xi,yi均为整数。求一棵树边只能向上和向右延展的经过所有点的最小长度。(n<=1000, 0<=xi, yi<=10000)
- #include <cstdio>
- using namespace std;
- const int N=1005, oo=~0u>>1;
- int d[N][N], x[N], y[N], n, s[N][N];
- int main() {
- while(~scanf("%d", &n)) {
- for(int i=1; i<=n; ++i) scanf("%d%d", &x[i], &y[i]);
- for(int i=1; i<n; ++i) d[i][i+1]=y[i]-y[i+1]+x[i+1]-x[i], s[i][i+1]=i+1;
- for(int len=3; len<=n; ++len)
- for(int i=1; i<=n-len+1; ++i) {
- int j=i+len-1, l=s[i][j-1], r=s[i+1][j], &now=d[i][j], &pos=s[i][j];
- now=oo;
- for(int k=l; k<=r; ++k) {
- int t=d[i][k-1]+d[k][j]+y[k-1]-y[j]+x[k]-x[i];
- if(now>=t) {
- now=t;
- pos=k;
- }
- }
- }
- printf("%d\n", d[1][n]);
- }
- return 0;
- }
一开始乱想= =乱搞无果= =b,于是妈呀看了题解 = =
妈呀我没想到.....d(i, j)表示i~j个点的最小代价,由于点都满足题目所给的条件,对于两棵i~k-1, k~j的树连接起来显然代价为y[k-1]-y[j]+x[k]-x[i]
设$w(i, j, k)=y[k-1]-y[j]+x[k]-x[i]$,那么得到:
$$d(i, j)=min \{ d(i, k-1)+d(k, j)+w(i, j, k) \}, i<j$$
我一开始看到$w$是三元的= =便又手推了一下四边形不等式的证明= =发现这竟然和$k$无关!即如果四边形不等式满足$w(i, j, k)+w(i', j', k) \le w(i', j, k)+w(i, j', k)$,那么和原来的一模一样!原因在哪?因为我是一个sb= =关于$w$的不等式左右加上两个$y[k-1]+x[k]$是可以约掉的我还傻x的重新证明了一下!
那么本题直接把状态变为$w(i, j)$先不管$k$了= =
我们先来证明$w$的区间单调性,很显然吧...题目已经满足= =
然后来证明$w$的四边形不等式....首先我们要一个容易证明不等式成立的式子= =
首先四边形不等式变形为
$$w(i, j')-w(i, j) \ge w(i', j')-w(i', j)$$
发现当$j$不变时(即固定),那么我们只需要判断$w(i, j')-w(i, j)$的$i$如果增大值是变大还是变小即可,如果是变小(递减)显然满足四边形不等式(因为$i' \ge i$)。
所以得到一个定理:如果$w(i, j)$满足四边形不等式,则我们只需要判断:当j不变时,$w(i, j+1)-w(i, j)$是否单调递减即可。(j同理,咦j要不要一起证啊?)
那么本题由于$w(i, j+1)-w(i, j) = y[j]-y[j+1]$与$i$无关所以满足条件...
那么水题啦= =
【HDU】3516 Tree Construction的更多相关文章
- 【HDU】4888 Redraw Beautiful Drawings 网络流【推断解是否唯一】
传送门:pid=4888">[HDU]4888 Redraw Beautiful Drawings 题目分析: 比赛的时候看出是个网络流,可是没有敲出来.各种反面样例推倒自己(究其原因 ...
- 【BZOJ】2631: tree LCT
[题意]给定n个点的树,每个点初始权值为1,m次操作:1.x到y的点加值,2.断一条边并连一条边,保证仍是树,3.x到y的点乘值,4.x到y的点权值和取模.n,m<=10^5. [算法]Link ...
- 【BZOJ2212】[Poi2011]Tree Rotations 线段树合并
[BZOJ2212][Poi2011]Tree Rotations Description Byteasar the gardener is growing a rare tree called Ro ...
- 【题解】Digit Tree
[题解]Digit Tree CodeForces - 716E 呵呵以为是数据结构题然后是淀粉质还行... 题目就是给你一颗有边权的树,问你有多少路径,把路径上的数字顺次写出来,是\(m\)的倍数. ...
- 【题解】[P4178 Tree]
[题解]P4178 Tree 一道点分治模板好题 不知道是不是我见到的题目太少了,为什么这种题目都是暴力开值域的桶QAQ?? 问点对,考虑点分治吧.直接用值域树状数组开下来,统计的时候直接往树状数组里 ...
- 【总结】Link-Cut Tree
这是一篇关于LCT的总结 加删边的好朋友--Link Cut Tree Link-Cut Tree,LCT的全称 可以说是从树剖引出的问题 树剖可以解决静态的修改或查询树的链上信息:那如果图会不断改变 ...
- 【HDU】6110 路径交(2017百度之星) 线段树+RMQ-LCA+树链的交
[题目]2017"百度之星"程序设计大赛 - 初赛(A) [题意]给定n个点的带边权树,m条编号1~m的路径,Q次询问编号区间[L,R]所有链的交集的长度.n<=500000 ...
- HDOJ 3516 Tree Construction
四边形优化DP Tree Construction Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
- 【HDU】2191 多重背包问题
原题目:悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 [算法]多重背包(有限背包) 动态规划 [题解]http://blog.csdn.net/acdreamers/article/detail ...
随机推荐
- 一个通过网络转换Ico到Png图片的小小程序(Ico2Png)
做软件界面需要用到ico文件, 结果皮肤库不支持ico格式的图标, 所以就想到了把ico转换成png. 网上ico转png的软件貌似并不多, 反倒是png转ico很大一片~~~~~~~~~ 要转换ic ...
- 《精通Hibernate:Java对象持久化技术详解》目录
图书信息:孙卫琴 电子工业出版社 第1章 Java应用分层架构及软件模型: 1.1 应用程序的分层体系结构 1.1.1 区分物理层和逻辑层 1.1.2 软件层的特征 1.1.3 软件分层的优点 1.1 ...
- C语言中main函数的参数
转自:http://blog.csdn.net/cnctloveyu/article/details/3905720 我们经常用的main函数都是不带参数的.因此main 后的括号都是空括号.实际上, ...
- python web编程-web客户端编程
web应用也遵循客户服务器架构 浏览器就是一个基本的web客户端,她实现两个基本功能,一个是从web服务器下载文件,另一个是渲染文件 同浏览器具有类似功能以实现简单的web客户端的模块式urllib以 ...
- Android开发工具之Dash
作为一名死coder,每天最常见的动作就是查看各种API文档,你一定也有过同时打开N个窗口(HTML.PDF.CHM),不停的在编辑器与文档之间切换的感受吧?怎么说呢,其实我很讨厌这种枯燥无味的动作, ...
- 标签q
标记短的引用,默认是中文符号:双引号 <p>文字<q>段落中的引用</q>文字</p> 如果是在html里直接敲出引号,是这样的: <p>文 ...
- 【MySQL 安装过程1】顺利安装MySQL完整过程
一.MySQL Sever的安装 1.开始安装: 2.这里就要开始注意,端口号我们的my SQL端口号为3306 3.下面要输入用户名和用户密码.注意,帐号密码 都是 root. 4.下面的最后一页 ...
- mob免费短信验证码安卓SDK调用方法
很不错的一款免费验证码平台,支持IOS.安卓,比那些收费的稳定.开发容易.分享给大家,希望大家不要滥用 官网: http://mob.com/ 官方有开发文档,但是有几点要注意的官方没有提到,导致初始 ...
- 解决ScrollView嵌到listView冲突问题
方法一: 把下面的方法放在绑定适配器操作的下面就行. /** * 重新计算ListView的高度,解决ScrollView和ListView两个View都有滚动的效果,在嵌套使用时起冲突的问题 * @ ...
- ASP.Net MVC开发基础学习笔记(2):HtmlHelper与扩展方法
一.一个功能强大的页面开发辅助类—HtmlHelper初步了解 1.1 有失必有得 在ASP.Net MVC中微软并没有提供类似服务器端控件那种开发方式,毕竟微软的MVC就是传统的请求处理响应的回归. ...