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;}
阅读全文
0 0
- uva 1347 动态规划DAG lrj-P269
- uva 437 动态规划 lrj
- uva 10285 lrj-P304 从简单DAG动态规划得到的感悟
- uva 11400 lrj-P275 动态规划
- uva 437 DAG上的动态规划
- dp专题 lrj-p269 uva A Spy in the Metro 2003wf
- 动态规划 DAG问题uva 437 The Tower of Babylon
- The Tower of Babylon DAG上的动态规划+uva
- UVA 103 Stacking Boxes (DAG上的动态规划)
- UVa 437 - The Tower of Babylon(DAG动态规划)
- UVA 437 巴比伦塔(DAG上的动态规划)
- uva 116 动态规划 多阶段决策问题 路径记录 lrj-P270
- uva 11584 计算最少回文串数 动态规划 lrj-P276
- 动态规划初步1(LRJ紫书)
- DAG上的动态规划
- DAG 动态规划 矩阵嵌套
- DAG模型的动态规划
- DAG上的动态规划
- Mips TLB miss实现in Linux
- Linux shell 的 test 命令用法详解
- jsp后一个窗口传值给前一个窗口,子父窗口之间的传值
- Bell数
- 百度富文本编辑器Ueditor上传图片时标签中添加宽高
- uva 1347 动态规划DAG lrj-P269
- 闲聊Linux内存管理(1)
- leetcode 300. Longest Increasing Subsequence
- bzoj2729: [HNOI2012]排队
- mmap原理及流程(kernel 4.1版本)
- acm之产生数据
- 【STL】容器 > 顺序容器 > deque(双端队列)
- 输入输出格式练习
- Activity.startActivity源码分析