原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=3516

题意:

大概就是给你个下凸包的左侧,然后让你用平行于坐标轴的线段构造一棵树,并且这棵树的总曼哈顿距离最短

题解:

很容易得到转移方程:

$$dp[i][j]=min \{ dp[i][k-1]+dp[k][j] + dis(uni(i,k-1),uni(k,j))\}$$

其中$dp[i][j]$表示从$i$到$j$的最优解,$dis(i,j)$表示$i$和$j$之间的曼哈顿距离,$uni(i,j)$表示将$i$和$j$用平行于坐标轴的线段连在一起时的拐角点。

然后可以证明这是满足四边形优化条件的。

然后四边形优化一下就好。

代码:

#include<iostream>
#include<cstring>
#include<queue>
#include<vector>
#include<algorithm>
#include<climits>
#include<cmath>
#define MAX_N 1234
#define INF LLONG_MAX/1234
using namespace std; typedef long long LL; LL dp[MAX_N][MAX_N]; int n; struct point {
public:
LL x, y; point(LL xx, LL yy) : x(xx), y(yy) { } point() { }
}; point P[MAX_N]; LL dis(point a,point b){
return abs(a.x-b.x)+abs(a.y-b.y);
} point uni(point a,point b) {
return point(min(a.x, b.x), min(a.y, b.y));
} int s[MAX_N][MAX_N]; int main() {
cin.sync_with_stdio(false);
while (cin >> n) {
for (int i = ; i <= n; i++)
cin >> P[i].x >> P[i].y;
for (int i = ; i <= n; i++)
for (int j = ; j <= n; j++) {
if (i == j)
dp[i][j] = ;
else
dp[i][j] = INF;
}
for (int i = ; i < n; i++)
dp[i][i + ] = dis(P[i], P[i + ]), s[i][i + ] = i + ;
for (int t = ; t <= n; t++)
for (int i = ; i + t <= n; i++) {
int j = i + t;
int pos = ;
for (int k = s[i][j - ]; k <= s[i + ][j]; k++)
if (dp[i][j] > dp[i][k - ] + dp[k][j]+ dis(uni(P[i], P[k - ]), uni(P[k], P[j])))
dp[i][j] = dp[i][k - ] + dp[k][j] + dis(uni(P[i], P[k - ]), uni(P[k], P[j])), pos = k;
s[i][j] = pos;
}
cout << dp[][n] << endl;
}
return ;
}

最新文章

  1. user agent stylesheet (浏览器默认样式)!
  2. [多图]Windows 10 Build 10565今推送:优化界面菜单 Cortana改进
  3. mysql sql语句执行时间查询
  4. C++Builder生成的EXE如何在别的电脑上正常运行
  5. c# UDP
  6. Hadoop JobHistory
  7. CSS控制 table 的 cellpadding,cellspacing
  8. Node.js学习之TCP/IP数据通讯
  9. jQuery Mobile事件,开发全解+完美注释
  10. Sass之混合宏、继承、占位符
  11. Spring 4.x (二)
  12. div悬浮窗口设计来完成注册页面
  13. Spring Boot:定时任务
  14. 解决org.hibernate.exception.SQLGrammarException:could not insert
  15. 关于PHP批量图片格式转换的问题--本文转成webp, 其他过程格式一样
  16. jsr223 md5
  17. ch01 PHP开篇
  18. linux 使用笔记3
  19. 11th 回顾5个问题
  20. [转]java利用AES实现URL的参数加密

热门文章

  1. .gitignore&#160;中文文件夹无效
  2. UIAutomator2、Appium、Robotium搭建环境与框架对比
  3. json序列化datetime类型数据
  4. CPU指令集不同导致的core分析
  5. PEAR DB 初学笔记
  6. CentOS 6.3安装配置LAMP服务器(Linux+Apache+MySQL+PHP5)
  7. 逆向映射是干嘛的anon_vma, vma, anon_vma_chain
  8. HTTP3.0(QUIC的实现机制)
  9. lambda表达式10个示例——学习笔记
  10. MPSVPX 配置