hdu 2224

(1)题意:

从1找一条到n的路径(路径上的前一个节点的编号小于后一个节点的编号),

然后找一条从n到1的路径,(路径上的前一个节点的编号大于后一个节点的编号)要求这两条路径遍历所有点,

并且这路径之和最短。

(2)思路:

双调欧几德里dp(TSP),

求出所有i~j两点之间的距离,数组dp[i][j]表示从1~i和与1~j区间内的路径之和的最小值(i<j)并且经过1~j的所有点。

考虑i与j的关系:

如果i<j-1,dp[i][j] = MIN(dp[i][j],dp[i][j-1]+dis[j-1][j]);

如果i==j-1, dp[i][j] = MIN(dp[i][j],dp[k][j-1]+dis[k][j]);

(3)代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int maxn = 220;
const double INF = 1e9+10;
int n;
double dis[maxn][maxn],dp[maxn][maxn];
struct Node{double x,y;
}cur[maxn];
double MIN(double x,double y){return x<y?x:y;
}
int main(void){while(~scanf("%d",&n)){for(int i=1;i<=n;i++) scanf("%lf%lf",&cur[i].x,&cur[i].y);for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++)dis[i][j] = sqrt((cur[i].x-cur[j].x)*(cur[i].x-cur[j].x)+(cur[i].y-cur[j].y)*(cur[i].y-cur[j].y));dp[1][2] = dis[1][2];for(int j=3;j<=n;j++){for(int i=1;i<j-1;i++)dp[i][j] = dp[i][j-1]+dis[j-1][j];dp[j-1][j] = INF;for(int k=1;k<j-1;k++)dp[j-1][j] = MIN(dp[j-1][j],dp[k][j-1]+dis[k][j]);}dp[n][n] = dp[n-1][n]+dis[n-1][n];printf("%.2lf\n",dp[n][n]);}return 0;
}

hdu 2224(dp)相关推荐

  1. hdu 5534(dp)

    Input The first line contains an integer T indicating the total number of test cases. Each test case ...

  2. hdu 2155(dp)

    小黑的镇魂曲 Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem D ...

  3. HDU 2571(dp)题解

    命运 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  4. HDU 4489(DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=4489 解题思路这里已经说的很清楚了: http://blog.csdn.net/bossup/article/d ...

  5. 跳打开hdu 1208 (DP)

    新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正 点击打开链接 /* DP ,有点水,直接码代. map[ i ][ j ]表现跳几格   dp [ i ][ j ] 表现有几种条法 ...

  6. hdu 1024(dp)

    传送门:Max Sum Plus Plus 题意:从n个数中选出m段不相交的连续子段,求这个和最大. 分析:经典dp,dp[i][j][0]表示不取第i个数且前i个数分成j段达到的最优值,dp[i][ ...

  7. hdu 3466(dp)

    讲解博客 针对单个物品好理解贪心策略,两个物品相对比的思路不易理解. #include<cstdio> #include<iostream> #include<cstri ...

  8. HDU 2577(DP)

    题意:要求一个字符串输入,按键盘的最少次数.有Caps Lock和Shift两种转换大小写输入的方式 思路:用dpa与dpb数组分别记录Caps Lock的开关状态,dpa表示不开,dpb表示开 代码 ...

  9. HDU6578 2019HDU多校训练赛第一场 1001 (dp)

    HDU6578 2019HDU多校训练赛第一场 1001 (dp) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6578 题意: 你有n个空需要去填,有 ...

最新文章

  1. Linux DHCP服务搭建
  2. QPushButton
  3. iOS UITextField使用全攻略
  4. 光端机和收发器的区别有哪些?
  5. DVWA Command Injection 练习总结
  6. 高通cpu排行_安卓手机芯片排行:麒麟990 5G仅排第三,980还输给了765G?
  7. RocketMQ(十)——Consumer消费进度(Offset)的管理
  8. idea保存快捷键_windows10下idea快捷键文件
  9. Python:正则表达式re.compile()
  10. iOS集成支付宝支付 Alipay
  11. Java POI导出(图片,文字,表格)word文档
  12. error: #109: expression preceding parentheses of apparent call must have (pointer-to-) function typ
  13. 小孩学计算机技术有什么好处,儿童学习电脑的好处
  14. oracle 启动crs进程,由于CRS磁盘dismount造成的CRS进程无法启动问题
  15. 笔记②:牛客校招冲刺集训营---C++工程师(面向对象(友元、运算符重载、继承、多态) -- 内存管理 -- 名称空间、模板(类模板/函数模板) -- STL)
  16. 寒门再难出贵子(很现实,很残酷,慎入)
  17. C语言程序设计第六章例题(数组)
  18. 用mysql触发器做数据统计
  19. 【Flink源码篇】Flink 1.15.0源码编译
  20. 优词词根词典mdx_成都seo网店优化24小时在线,关键词优化步骤

热门文章

  1. QQ群78928780记录整理:90521-精华
  2. 只需一行Python代码即可玩20几款小游戏
  3. 如何下载pycharm历史版本
  4. 网易云音乐爬虫实战——肖战《红梅赞》下评论数据挖掘与分析
  5. 在线研讨会 matlab,MatLab
  6. python爬虫——爬取起点中文网作品信息
  7. VS2015+Android环境配置【appt.exe停止运行以及packaged_resources不存在】错误解决
  8. MYSQL练习题:连续两天登录的游戏玩家比率
  9. 面向对象基础——方法重载
  10. 【JavaSe】String类、StringBuilder、StringBuffer(超详细)