hdu3516
题目大意:这个。。。。翻译起来还真是不好说,各位四六没过的ACMer正好去原网页看看题意,过了的好孩子还是去看看原网页看看锻炼一下吧。(当然我做这道题目的时候,教练已经摆明说要用四边形不等式,所以还是感觉没什么压力的)这样我一眼就看出来了题意描述的问题:应该澄清如果(i,j)这两个点放在一个区间(一棵树上),就必须要以点(xi,yj)作为最近公共祖先。
然后来分析一下优化因素:
- 如果(i<=k<=j)当前最优解中(i,j)是放在一棵子树上的,那么k一定也在这棵子树上。(这一点很容易想到吧?这是由题目条件xi<xj,yi>yj决定的
- (i<=k<=j && i<j)令s[i][j]是将(i,j)放在一棵子树Tree(i,j)上最优解——Tree(i,j)右子树的左端点,则max(s[i][j-1],i+1)<=s[i][j]<=s[i+1][j]。
其实四边形不等式最重要的是函数的四边形性质(a<=b<=c<=d) m[a][c]+m[b][d]<=m[a][d]]+m[b][c],带来的解的单调性s[i-1][j]<=s[i][j]<=s[i][j+1]。当然具体题目要具体分析,诸如我之前的文章所提到的dp的方向有向上(k=i-1)和向下(k=i+1)的区别一样。不管怎么样,最核心的一点是解的单调性!
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- using namespace std;
- const int maxn=;
- const int infinity=(-)^(<<);
- int dp[maxn][maxn];
- int s[maxn][maxn];
- struct point{
- int x,y;
- }p[maxn];
- int S(int i,int k,int j){
- return p[k-].y-p[j].y+p[k].x-p[i].x;
- }
- int DP(int n){
- //if(n <= 1) return 0;
- for(int i=;i<=n;i++)
- dp[i][i]=, s[i][i]=i;
- int tmp;
- for(int i=n-;i>;i--){
- for(int j=i+;j<=n;j++){
- dp[i][j]=infinity;
- for(int k=max(s[i][j-],i+);k<=s[i+][j];k++)
- if(dp[i][j] > (tmp=dp[i][k-]+dp[k][j]+S(i,k,j)))
- dp[i][j]=tmp, s[i][j]=k;
- }
- }
- return dp[][n];
- }
- int main()
- {
- int n;
- while(cin>>n){
- for(int i=;i<=n;i++) scanf("%d%d",&p[i].x,&p[i].y);
- printf("%d\n",DP(n));
- }
- return ;
- }
hdu3516的更多相关文章
- HDU3516 树的构造
题目大意:平面上有n个点,构成一个单调递减的序列.即对于任意的i<j,有xi<xj,yi>yj.现在要用一棵树连接这n个点.树边为有向边,只能向右或向上.求最小的权值. 分析:本题其 ...
- hdu3516 Tree Construction (区间dp+四边形优化)
构造方法肯定是把相邻两个点连到一起,变成一个新点,然后再把新点和别的点连到一起.... 设f[i,j]为把第i到j个点都连到一起的代价,那么答案就是f[1,n] f[i,j]=min{f[i,k]+f ...
- [HDU3516] Tree Construction [四边形不等式dp]
题面: 传送门 思路: 这道题有个结论: 把两棵树$\left[i,k\right]$以及$\left[k+1,j\right]$连接起来的最小花费是$x\left[k+1\right]-x\left ...
- hdu3516 Tree Construction (四边形不等式)
题意:给定一些点(xi,yi)(xj,yj)满足:i<j,xi<xj,yi>yj.用下面的连起来,使得所有边的长度最小? 题解:直接给出吧 f[i][j]=min(f[i][k]+f ...
- hdu3516 Tree Construction
Problem Description Consider a two-dimensional space with a set of points (xi, yi) that satisfy xi & ...
随机推荐
- WordPress中文汉字username不能注冊怎么办?
WordPress注冊用户是不支持中文的.可是近期在项目中须要用到中文注冊. 后来想到了简单的处理办法: 打开 wp-includes/formatting.php.找到 function sanit ...
- 移动端H5页面之iphone6的适配
iphone6 及 iphone 6 plus 已经出来一段时间了.很多移动端网站,以前写死body 为320px的,现在估计也忙着做适配了. 大屏幕手机其实一直有,只是以前大家没怎么重视,移动端的H ...
- Reverse Key Indexes反向索引
Reverse Key Indexes反向索引A reverse key index is a type of B-tree index that physically reverses the by ...
- Erp第三章:管理问题与MRP、MRP2、ERP
1企业管理者经常头疼问题:一.“产供销”严重脱节 . 二.财务数据和业务数据对不上号 2.MRP(物料需求计划,Material Requiremengts Planning),MRP2( ...
- MVC3学习随记一
最近才接触mvc,也是才接触linq语法,还有EntiyFramework,个人感觉这种开发模式还是挺不错的,随手记点笔记,简单做个增删改查吧 一.实例化上下文ObjectContext: 引用空间那 ...
- asp.net页面与页面之间参数传递
传值asp文件send.aspx 代码如下 复制代码 <form id="form1" runat="server" action="recei ...
- MySQL导入sql 文件的5大步骤
http://database.51cto.com/art/201005/200739.htm 以下的文章主要介绍的是MySQL导入sql 文件,即MySQL数据库导入导出sql 文件的实际操作步骤, ...
- VS2010中查询替换使用
MSDN:http://msdn.microsoft.com/zh-cn/library/afy96z92.aspx 例子:
- 使用 hibernate 根据映射文件生成数据库表
为了更好的显示效果,可以在hibernate.cfg.xml配置文件的<session-factory>标签里加入以下内容: 显示sql语句和格式化显示sql语句: <propert ...
- GetRect:通过提供点和宽度返回对应矩形RECT
RECT GetRect(int x,int y,int width,int height); 描述:通过提供点和宽度返回对应矩形RECT 返回:矩形结构RECT 参数: x:X轴坐标 y:Y轴坐标 ...