题目大意:这个。。。。翻译起来还真是不好说,各位四六没过的ACMer正好去原网页看看题意,过了的好孩子还是去看看原网页看看锻炼一下吧。(当然我做这道题目的时候,教练已经摆明说要用四边形不等式,所以还是感觉没什么压力的)这样我一眼就看出来了题意描述的问题:应该澄清如果(i,j)这两个点放在一个区间(一棵树上),就必须要以点(xi,yj)作为最近公共祖先

  然后来分析一下优化因素:

  1. 如果(i<=k<=j)当前最优解中(i,j)是放在一棵子树上的,那么k一定也在这棵子树上。(这一点很容易想到吧?这是由题目条件xi<xj,yi>yj决定的
  2. (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的更多相关文章

  1. HDU3516 树的构造

    题目大意:平面上有n个点,构成一个单调递减的序列.即对于任意的i<j,有xi<xj,yi>yj.现在要用一棵树连接这n个点.树边为有向边,只能向右或向上.求最小的权值. 分析:本题其 ...

  2. hdu3516 Tree Construction (区间dp+四边形优化)

    构造方法肯定是把相邻两个点连到一起,变成一个新点,然后再把新点和别的点连到一起.... 设f[i,j]为把第i到j个点都连到一起的代价,那么答案就是f[1,n] f[i,j]=min{f[i,k]+f ...

  3. [HDU3516] Tree Construction [四边形不等式dp]

    题面: 传送门 思路: 这道题有个结论: 把两棵树$\left[i,k\right]$以及$\left[k+1,j\right]$连接起来的最小花费是$x\left[k+1\right]-x\left ...

  4. hdu3516 Tree Construction (四边形不等式)

    题意:给定一些点(xi,yi)(xj,yj)满足:i<j,xi<xj,yi>yj.用下面的连起来,使得所有边的长度最小? 题解:直接给出吧 f[i][j]=min(f[i][k]+f ...

  5. hdu3516 Tree Construction

    Problem Description Consider a two-dimensional space with a set of points (xi, yi) that satisfy xi & ...

随机推荐

  1. DevExpress Util HelpV3

    using System; using System.Drawing; using DevExpress.XtraCharts; namespace DevExpressUtilHelpV3 { pu ...

  2. 华为S5700基础配置----备份和恢复配置文件

    一:备份配置文件 设备作为FTP服务器,用户PC作为FTP客户端 # 配置设备的FTP功能及FTP用户信息. <HUAWEI> system-view [HUAWEI] ftp serve ...

  3. Photoshop CS6 基础知识

                                                                  Photoshop CS6  基础知识 新建  练习 宽度72, 像素厘米 ...

  4. 用JQuery实现表格隔行变色和突出显示当前行

    用JQuery实现表格隔行变色和突出显示当前行 上源码 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "htt ...

  5. 【JQ成长笔记】关于$(this).index与$.each的使用

    本人菜鸟入门,小庙容不下大神的 O(∩_∩)O~~轻喷~ 工作当中响应某个需求,切换选项卡的一个效果,根据每个选项下的内容元素的总数不同而进行不同的html变化(如果选项卡下的内容为空就等于XXX,否 ...

  6. Transfer learning across two sentiment classes using deep learning

    用深度学习的跨情感分类的迁移学习 情感分析主要用于预测人们在自然语言中表达的思想和情感. 摘要部分:two types of sentiment:sentiment polarity and poli ...

  7. [转]数组引用:C++ 数组做参数 深入分析

    "数组引用"以避免"数组降阶"(本文曾贴于VCKBASE\C++论坛) 受[hpho]的一段模板函数的启发,特写此文,如有雷同,实在遗憾. 数组降阶是个讨厌的事 ...

  8. python---连接MySQL第三页

    用python语言从MySQL中查询数据 #!conding:utf-8 from mysql.connector import errorcode import mysql.connector cn ...

  9. SQL Server 查看指定表上的索引

    解决方案: sys.indexs; ---------------------------------------------------------------------------------- ...

  10. 论山寨手机与Android联姻的技术基础 【序】

    山寨手机的兴起,离不开 MTK(联发科).MTK为手机制造提供了一揽子解决方案,其中既包括硬件,也包括软件.软件方面最重要的,是操作系统.MTK方案的软件的稳定性非常高,一方面是因为其硬件系统变化不大 ...