hdu 2224(dp)
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)相关推荐
- hdu 5534(dp)
Input The first line contains an integer T indicating the total number of test cases. Each test case ...
- hdu 2155(dp)
小黑的镇魂曲 Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem D ...
- HDU 2571(dp)题解
命运 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- HDU 4489(DP)
http://acm.hdu.edu.cn/showproblem.php?pid=4489 解题思路这里已经说的很清楚了: http://blog.csdn.net/bossup/article/d ...
- 跳打开hdu 1208 (DP)
新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正 点击打开链接 /* DP ,有点水,直接码代. map[ i ][ j ]表现跳几格 dp [ i ][ j ] 表现有几种条法 ...
- hdu 1024(dp)
传送门:Max Sum Plus Plus 题意:从n个数中选出m段不相交的连续子段,求这个和最大. 分析:经典dp,dp[i][j][0]表示不取第i个数且前i个数分成j段达到的最优值,dp[i][ ...
- hdu 3466(dp)
讲解博客 针对单个物品好理解贪心策略,两个物品相对比的思路不易理解. #include<cstdio> #include<iostream> #include<cstri ...
- HDU 2577(DP)
题意:要求一个字符串输入,按键盘的最少次数.有Caps Lock和Shift两种转换大小写输入的方式 思路:用dpa与dpb数组分别记录Caps Lock的开关状态,dpa表示不开,dpb表示开 代码 ...
- HDU6578 2019HDU多校训练赛第一场 1001 (dp)
HDU6578 2019HDU多校训练赛第一场 1001 (dp) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6578 题意: 你有n个空需要去填,有 ...
最新文章
- Linux DHCP服务搭建
- QPushButton
- iOS UITextField使用全攻略
- 光端机和收发器的区别有哪些?
- DVWA Command Injection 练习总结
- 高通cpu排行_安卓手机芯片排行:麒麟990 5G仅排第三,980还输给了765G?
- RocketMQ(十)——Consumer消费进度(Offset)的管理
- idea保存快捷键_windows10下idea快捷键文件
- Python:正则表达式re.compile()
- iOS集成支付宝支付 Alipay
- Java POI导出(图片,文字,表格)word文档
- error: #109: expression preceding parentheses of apparent call must have (pointer-to-) function typ
- 小孩学计算机技术有什么好处,儿童学习电脑的好处
- oracle 启动crs进程,由于CRS磁盘dismount造成的CRS进程无法启动问题
- 笔记②:牛客校招冲刺集训营---C++工程师(面向对象(友元、运算符重载、继承、多态) -- 内存管理 -- 名称空间、模板(类模板/函数模板) -- STL)
- 寒门再难出贵子(很现实,很残酷,慎入)
- C语言程序设计第六章例题(数组)
- 用mysql触发器做数据统计
- 【Flink源码篇】Flink 1.15.0源码编译
- 优词词根词典mdx_成都seo网店优化24小时在线,关键词优化步骤
热门文章
- QQ群78928780记录整理:90521-精华
- 只需一行Python代码即可玩20几款小游戏
- 如何下载pycharm历史版本
- 网易云音乐爬虫实战——肖战《红梅赞》下评论数据挖掘与分析
- 在线研讨会 matlab,MatLab
- python爬虫——爬取起点中文网作品信息
- VS2015+Android环境配置【appt.exe停止运行以及packaged_resources不存在】错误解决
- MYSQL练习题:连续两天登录的游戏玩家比率
- 面向对象基础——方法重载
- 【JavaSe】String类、StringBuilder、StringBuffer(超详细)