hdu 3516 Tree Construction (四边形优化)
来源:互联网 发布:星际老男孩淘宝店2016 编辑:程序博客网 时间:2024/04/30 02:24
【题目大意】
二维平面上有n个,这些点满足
i < j时,xi < xj, yi > yj。
只用朝x轴或y轴正方向的边连起来,形成一棵树,使得所有边的长度最小。 n <= 1000
此类合并问题,如果满足四边形不等式,就可以通过四边形优化降次了。
定义状态 dp[i,j]表示点i到点j合并在一起的最小花费(树枝的长度),状态转移方程:dp[i,j]= min(dp[i,k]+dp[k+1,j]+cost(i,j) ) i < k < j, cost(i,j)=py[k]-py[j]+px[k+1]-px[i];
证明:
F(i)=cost(i,j+1)-cost(i,j)=py[j]-py[j+1]是一个与i无关的多项式,
所以j固定时,F(i)满足四边形不等式。
s[i,j]=k; s[i-1,j] <= s[i,j] <= s[i,j+1];
由于决策s具有单调性,因此状态转移方程可修改为:
dp[i,j]= min(dp[i,k]+dp[k+1,j]+cost(i,j) ) s[i-1,j] <=k<= s[i,j+1];
复杂度降到o(n^2)(原来从i…j-1枚举k, 优化后只需要从s[i,j-1]到s[i+1,j]枚举k就可以了。其中s[i,j]指dp[i,j]取最优解的分割点,这样复杂度就变成O(n2)啦!
)
dp[i][j]=MIN(dp[i][k]+dp[k+1][j]+x[k+1]-x[i]+y[k]-y[j] i<=k<=j
#include <iostream>#include <cstdio> #include <algorithm>#include <cmath>#include <cstring> #define LL long long #define inf 0x3f3f3f3f using namespace std; const int N = 1005;int dp[N][N], s[N][N]; struct Node{ int x, y; }a[N]; int dis(int i, int j){ return abs(a[i].y - a[j].y) + abs(a[i].x - a[j].x); } int main(){ int n, m, T; while(scanf("%d",&n)!=EOF){ for(int i=1; i<=n; i++) scanf("%d%d", &a[i].x, &a[i].y); memset(dp, 0, sizeof(dp)); for(int i=1; i<=n; i++) { dp[i][i+1] = dis(i,i+1); s[i][i+1] = i; } for(int L=2; L<n; L++) { for(int i=1; i+L<=n; i++) { int j = i + L; dp[i][j] = inf; for(int k=s[i][j-1]; k<=s[i+1][j]; k++) if(dp[i][j] > dp[i][k]+dp[k+1][j]+dis(i,j)-(a[i].y-a[k].y)-(a[j].x-a[k+1].x)){ dp[i][j] = dp[i][k]+dp[k+1][j]+dis(i,j)-(a[i].y-a[k].y)-(a[j].x-a[k+1].x); s[i][j] = k; } } } printf("%d\n",dp[1][n]); } return 0; }
补充四边形优化知识,
区间包含的单调性:
如果对于 i ≤ i’< j ≤ j’,有 w(i’,j) ≤ w(i,j’),那么说明w具有区间包含的单调性。
可以形象理解为如果小区间包含于大区间中,那么小区间的w值不超过大区间的w值。
四边形不等式:
如果对于 i ≤ i’< j ≤ j’,有 w(i,j)+w(i’,j’)≤w(i’,j)+w(i,j’),我们称函数w满足四边形不等式。
可以形象理解为两个交错区间的w的和不超过小区间与大区间的w的和。
下面给出两个定理:
1、如果上述的 w 函数同时满足区间包含单调性和四边形不等式性质,那么函数dp也满足四边形不等式性质。
我们再定义 s(i,j) 表示 dp(i,j) 取得最优值时对应的下标(即 i≤k≤j 时,k 处的 dp 值最大,则 s(i,j)=k)。此时有如下定理
2、假如dp(i,j)满足四边形不等式,那么s(i,j)单调,即s(i,j)≤s(i,j+1)≤s(i+1,j+1)。
这两个定理证明在赵爽的《动态规划加速原理之四边形不等式》中给出了相关的证明。
有了上述的两个定理后,我们发现如果w函数满足区间包含单调性和四边形不等式性质,那么有 s(i,j-1)≤s(i,j)≤s(i+1,j) 。
以上资料摘自别处,笔者也在摸索中(会用不会证)【无奈。
这里有个推荐详解
- hdu 3516 Tree Construction (四边形优化)
- HDU 3516 Tree Construction (四边形优化DP)
- hdu 3516 Tree Construction(四边形优化)
- Tree Construction - HDU 3516 四边形不等式优化
- HDU - 3516 Tree Construction(四边形优化)
- hdu 3516 Tree Construction 四边形不等式优化
- hdu 3516 Tree Construction (四边形不等式优化DP)
- HDU 3516 Tree Construction (四边形不等式优化DP)
- HDU 3516 Tree Construction (dp+四边形不等式优化)
- HDU-3516 Tree Construction(区间dp+四边形优化)
- dp四边形优化 Hdu 3516 Tree Construction 题解
- hdu 3516 Tree construction DP+四边形不等式
- hdu 3516 Tree Construction
- hdu 3516(四边形优化dp)
- hdu 3516 四边形优化dp
- hdu 3516 dp+四边形不等式优化
- HDU 3516 四边形优化 解题报告
- hdu 四边形优化dp
- java web系统初始化工作流程说明
- 查看so挂在哪行
- RS232串口通信
- 算法题——Longest Palindromic Substring(JAVA)DP字符串
- 累加器.exe
- hdu 3516 Tree Construction (四边形优化)
- Apache与nginx性能简单分析
- [网络流24题][codevs1922] 骑士共存问题 二分图最大独立集
- 34. Search for a Range
- Neverout:一款新的沉浸式益智游戏
- PlayerPrefs的学习
- Kotlin 学习压缩包
- JVM之Dalvik和ART的区别
- loadrunner之自动关联