【第22期】观点:IT 行业加班,到底有没有价值?

1347 - Tour(DP)

原创 2015年07月11日 08:33:25

题意:给定平面上n个点的坐标,设计一条路线,从最左边的点出发,走到最右边的点再返回,要求除了最左点和最右点之外每个点恰好经过一次,问最短路径。

典型的多决策问题,需要用DP解决,关键是每个点恰走一次,所以需要将使DP有序化,因此我们规定d[i][j]表示1~max(i,j)全走过,且当前两人位置是i和j,还需要走多长的距离。

因为这两个人是无所谓的,所以d[i][j] = d[j][i] 。因此不妨规定i > j,且规定d[i][j] 只能转移到d[i+1][j]和d[i][i+1],也就是说下一步只能到i+1。由于i > j,所以转移到d[i+1][j] 和d[i+1][i]

为什么这样是对的呢? 之前已经说了,d[i][j] = d[j][i]   所以转移到那两个状态的意思就是第一个人转移到下一步或者第二个人转移到下一步,因此这个记录过程其实和背包是一样的(选当前这个物品或者不选)   ,  也就是说之前的最优结果都被记录了,所以这样的递推做法是完美的。

细节参见代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1000 + 10;
int n;
double x[maxn],y[maxn],dist[maxn][maxn],d[maxn][maxn];
int main(){
    while(~scanf("%d",&n)) {
        for(int i=1;i<=n;i++) scanf("%lf%lf",&x[i],&y[i]);
        //计算距离
        for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++) {
            dist[i][j] = sqrt((x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]));
        }
        //dp
        for(int i=n-1;i>=1;i--)
        for(int j=1;j<i;j++) {
            if(i==n-1) d[i][j] = dist[n-1][n] + dist[j][n];
            else d[i][j] = min(d[i+1][j] + dist[i][i+1],d[i+1][i] + dist[j][i+1]);
        }
        d[1][1] = d[2][1] + dist[1][2];//因为i > j ,所以循环中只记录到d[2][1]
        printf("%.2f\n",d[1][1]);
    }
    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

九度OJ 1347:孤岛连通工程 (最小生成树)

时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1522 解决:314 题目描述: 现在有孤岛n个,孤岛从1开始标序一直到n,有道路m条(道路是双...

P1347 乘积最大

地址:https://vijos.org/p/1347 描述 今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

51nod 1347 旋转字符串

题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1347 题目: S[0...n-1]是一个长度为n的字...

POJ 2431 Expedition (贪心 + 优先队列)

Expedition Time Limit: 1000MS   Memory Limit: 65536K       Description ...

NJUSTOJ 1347 内功or外功

题目大意:中文 /* * Problem ID : NJUSTOJ 1347 内功or外功 * Author : Lirx.t.Una ...

CSU OJ:1347 Last Digitn(找规律||找周期+快速幂)

1347: Last Digit Submit Page     Summary    Time Limit: 1 Sec     Memory Limit: 128 Mb     S...

uva 1347 poj 2267 Tour 最短双调回路

// uva1347 Tour 最短双调路线 // 这道题是看着紫书上面写着的 // dp[i][j]表示1至max(i,j)都已经走过时并且第一个人在i // 第二个人在j点时所要走的最短的距离,则...

POJ 3122 Pie 二分查找 +高精度

点击打开链接 题意:作者要开一个生日party,他现在拥有n块高度都为1的圆柱形奶酪,  已知每块奶酪的底面半径为r不等,作者邀请了f个朋友参加了他的party,  他要把这些奶酪平均分给所有的...

POJ1178:Camelot(FLOYD+DP)

Description Centuries ago, King Arthur and the Knights of the Round Table used to meet every year...

UVa1347/poj2677 - C - Tour(DP)

UVa1347/poj2677 - C - Tour 题意:有n个点,一飞行员从1号点出发,严格从左走到右在返回1号点(同样严格从右走到左),求经过除1号点和n号点外每个点恰好一次的整个行程的最小值...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)