题意:

双调欧几里得旅行商问题。

思路:

dp。定义dp[i][j](i <= j)为从点j从右向左严格按照x坐标递减顺序走到点1,之后再从点1从左向右严格按照x坐标递增的顺序走到点i,并且在此过程中经过且仅经过1到j之间所有的点1次。则

dp[1][2] = dis[1][2];

dp[i][j] = dp[i][j - 1] + dis[j - 1][j]; (i < j - 1)

dp[i][j] = min(dp[k][j - 1] + dis[k][j]). (1 <= k < j - 1, i == j - 1)

最终,dp[n][n] = dp[n - 1][n] + dis[n - 1][n].

实现:

 #include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std; const int MAXN = , INF = 0x3f3f3f3f;
double dp[MAXN + ][MAXN + ], dis[MAXN + ][MAXN + ];
int n, x[MAXN + ], y[MAXN + ]; int square(int x)
{
return x * x;
} void init()
{
for (int i = ; i <= n; i++)
{
for (int j = i + ; j <= n; j++)
{
dis[i][j] = sqrt(square(x[i] - x[j]) + square(y[i] - y[j]));
}
}
} double solve()
{
dp[][] = dis[][];
for (int j = ; j <= n; j++)
{
// i < j - 1
for (int i = ; i <= j - ; i++)
{
dp[i][j] = dp[i][j - ] + dis[j - ][j];
}
// i == j - 1
dp[j - ][j] = INF;
for (int k = ; k <= j - ; k++)
{
dp[j - ][j] = min(dp[j - ][j], dp[k][j - ] + dis[k][j]);
}
}
return dp[n][n] = dp[n - ][n] + dis[n - ][n];
} int main()
{
while (cin >> n)
{
for (int i = ; i <= n; i++)
{
cin >> x[i] >> y[i];
}
init();
printf("%.2f\n", solve());
}
return ;
}

总结:

假设一个最优选择,然后再基于该最优选择来定义问题,是动态规划的惯用手法。

poj2677 Tour的更多相关文章

  1. POJ2677 Tour[DP 状态规定]

    Tour Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4307   Accepted: 1894 Description ...

  2. POJ2677 Tour(DP+双调欧几里得旅行商问题)

    Tour Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3929   Accepted: 1761 Description ...

  3. POJ 1637 Sightseeing tour

    Sightseeing tour Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9276   Accepted: 3924 ...

  4. Euler Tour Tree与dynamic connectivity

    Euler Tour Tree最大的优点就是可以方便的维护子树信息,这点LCT是做不到的.为什么要维护子树信息呢..?我们可以用来做fully dynamic connectivity(online) ...

  5. soj 1015 Jill's Tour Paths 解题报告

    题目描述: 1015. Jill's Tour Paths Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description Every ...

  6. poj1637 Sightseeing tour

    Sightseeing tour Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8859   Accepted: 3728 ...

  7. A quick tour of JSON libraries in Scala

    A quick tour of JSON libraries in Scala Update (18.11.2015): added spray-json-shapeless libraryUpdat ...

  8. POJ 1637 Sightseeing tour (混合图欧拉路判定)

    Sightseeing tour Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6986   Accepted: 2901 ...

  9. POJ 1637 Sightseeing tour (混合图欧拉回路)

    Sightseeing tour   Description The city executive board in Lund wants to construct a sightseeing tou ...

随机推荐

  1. CSS中的那点事儿(一)--- CSS中的单位1

    单位主要用在规定元素的数值性css属性的,这里主要讨论应用的比较多的是width height  padding margin font-size,而单位中应用最广泛就是%.px.em 百分比 百分比 ...

  2. https证书/即SSL数字证书申请途径和流程

    国际CA机构GlobalSign中国 数字证书颁发中心网站:http://cn.globalsign.com    https证书即SSL数字证书,是广泛用 于网站通讯加密传输的解决方案,是提供通信保 ...

  3. 「LuoguP2434」 [SDOI2005]区间(贪心

    Description 现给定n个闭区间[ai, bi],1<=i<=n.这些区间的并可以表示为一些不相交的闭区间的并.你的任务就是在这些表示方式中找出包含最少区间的方案.你的输出应该按照 ...

  4. NOIP2008 传纸条(DP及滚动数组优化)

    传送门 这道题有好多好多种做法呀……先说一下最暴力的,O(n^4的做法) 我们相当于要找两条从左上到右下的路,使路上的数字和最大.所以其实路径从哪里开始走并不重要,我们就直接假设全部是从左上出发的好啦 ...

  5. [yii2]Module的Namespace和控制器位置

    namespace和目录对应,否则无法找到控制器类,module文件在根路径 使用gii生成Module为\app\admin,那么 namespace app; class admin extend ...

  6. 多线程-threading模块

    #coding:utf-8 import threading from time import sleep,ctime #音乐播放器 def music(func): for i in range(2 ...

  7. C#:目录

    ylbtech-C#:目录 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http://ylbtech.cn ...

  8. nodejs URL 详解

    1 我们可以使用.parse方法来将一个URL字符串转换为URL对象 例如: url.parse('http://user:pass@host.com:8080/p/a/t/h?query=strin ...

  9. ecb-2.40与cedet-1.1的兼容(转载)

    转自:http://blog.csdn.net/cnsword/article/details/7474119 今天凑热闹把fedora升级到了17,emacs升级到了24,但是悲剧了,显示cedet ...

  10. Codeforces - 909C - Python Indentation - 简单dp

    http://codeforces.com/problemset/problem/909/C 好像以前做过,但是当时没做出来,看了题解也不太懂. 一开始以为只有上面的for有了循环体,这里的state ...