uva 1347 动态规划DAG lrj-P269

来源:互联网 发布:python学习手册 mobi 编辑:程序博客网 时间:2024/05/29 17:31

题意:

给出按照 x 坐标排序的一系列二维坐标上的点,让你通过来回走一圈,把所有点都恰好走一遍,除了最左端和最右端的点

使得总路程最短

题解:

让两个人同时走,并且不重合,从左边开始走道右边去

令dp【i】【j】表示两个人分别走道  i  和走到  j 的时候的最短路

因为dp【i】【j】==dp【j】【i】

故强行令  i > j

然后dp【i】【j】可以转移到dp【i+1】【j】或者dp【i】【i+1】,后者要满足上叙条件,则等价于dp【i+1】【i 】

最后的两人都要到 n ,但是  i > j  所以最后要处理一下即可,见代码


#include<math.h>#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct node{    int x,y;    node(){}    node(int x_,int y_){x=x_,y=y_;}}p[200];double dp[1010][1010];double dis(node p1,node p2){    return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));}int main(){    int cases=1,n;    //freopen("in.txt","r",stdin);    while(scanf("%d",&n)!=EOF)    {        for(int i=1;i<=n;i++)            scanf("%d%d",&p[i].x,&p[i].y);        dp[2][1]=dis(p[1],p[2]);        for(int i=3;i<=n;i++){            dp[i][i-1]=0x3f3f3f3f;            for(int j=1;j<i-1;j++){                dp[i][j]=dp[i-1][j]+dis(p[i],p[i-1]);                dp[i][i-1]=min(dp[i][i-1],dp[i-1][j]+dis(p[j],p[i]));            }        }        double ans=0x3f3f3f3f;        for(int j=1;j<n;j++)            ans=min(ans,dp[n][j]+dis(p[j],p[n]));        printf("%0.2lf\n",ans);    }    return 0;}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 被刑拘了家人该怎么办 看守所在押人员检查出乙肝怎么办 孩子不写作业老师该怎么办 孩子老师向我表白该怎么办 幼儿园老师打孩子家长该怎么办 老师对孩子太苛刻该怎么办 孩子不敢上学怕老师该怎么办 学生上课迟到老师该怎么办 看守所转监狱不收怎么办 己判实刑有病看守所不收怎么办 判决书生效前看守所不收怎么办 法院判实刑看守所不收怎么办 派出所立案后送拘留所了怎么办 打架斗殴被关在看守所了怎么办 在看守所羁押期间患癌症怎么办 无法偿还借款拘留15天后怎么办 离婚起诉被告人被羁押怎么办 事实不清的案件怎么办 交通事故没时间去做笔录怎么办 偷东西被拘留家长该怎么办 在香港被拘留了怎么办 发票认证机卡了怎么办 交罚款的单子丢了怎么办 父亲行政拘留考警察政审不过怎么办 非法经营罪立案后不批刑拘怎么办 12分扣完了怎么办2018 驾驶证c1扣14分怎么办 车辆被扣12分怎么办 两个违章扣12分怎么办 车辆违章扣12分怎么办 一下扣了20分怎么办 违章扣了100多分怎么办 车子累计扣12分怎么办 起诉了对方不来怎么办 在监狱里被打伤了怎么办 初三要体检没去怎么办 羁押人在看守所没判刑怎么办? 在看守所关两年了还没有判刑怎么办 开麻将馆被拘留怎么办 拘留31天了我该怎么办 收到一封拘留信怎么办