csu1527: Bounty Hunter
来源:互联网 发布:淘宝客不计入销量 编辑:程序博客网 时间:2024/05/18 00:01
Time Limit:5000MS Memory Limit:131072KB 64bit IO Format:%lld & %llu
Description
Input
Output
Sample Input
250 11 22 03 24 13100 1200 1300 1
Sample Output
9.300563079746400
从0到n-1走过去再走回来经过所有点保证走过的路程最短
假设来回的两条路各自经过的点中,除了0跟n-1外还有其它点是它们都有的,那么显然把这个点单独放在两条路中的一条都会更加好
所以两条路的点必然只有0,n-1两个交集
dp[i][j]:一条路以0,i为两个端点,另一条路以0,j为两个端点,且包括0跟max(i,j)中的所有点时的最短路程,由于上述原则,必然i,j要有一个大一些,我们设i>j
#include<map>#include<string>#include<cstring>#include<cstdio>#include<cstdlib>#include<cmath>#include<queue>#include<vector>#include<iostream>#include<algorithm>#include<bitset>#include<climits>#include<list>#include<iomanip>#include<stack>#include<set>using namespace std;struct point{double x,y;double dis(point one){returnsqrt(pow(x-one.x,2)+pow(y-one.y,2));}friend istream & operator >>(istream &is,point &one){is>>one.x>>one.y;return is;}};point box[600];double dp[600][600];int main(){int T;cin>>T;while(T--){int n;cin>>n;for(int i=0;i<n;i++)cin>>box[i];dp[1][0]=box[0].dis(box[1]);for(int i=1;i<n-2;i++){dp[i+1][i]=1e99;for(int j=0;j<i;j++){dp[i+1][i]=min(dp[i+1][i],dp[i][j]+box[j].dis(box[i+1]));dp[i+1][j]=dp[i][j]+box[i].dis(box[i+1]);}}double ans=n==2?2.0*box[0].dis(box[1]):1e99;for(int i=0;i<n-2;i++)ans=min(ans,dp[n-2][i]+box[n-2].dis(box[n-1])+box[i].dis(box[n-1]));printf("%.9f\n",ans);}}
0 0
- csu1527: Bounty Hunter
- zoj 3634 Bounty hunter
- ZOJ 3634 Bounty hunter(DP)
- ZOJ:3634Bounty hunter(二分+树状数组)
- CSU 1527 Bounty Hunter dp 双调旅行商
- CSU 1527 - Bounty Hunter(DP‘双调旅行商问题)
- bug bounty
- The Bug Bounty List
- Rootkit Hunter
- hdu4568 Hunter
- rootkit hunter
- Jason Hunter采访
- Rootkit Hunter v1.1.1
- Tube Hunter v9.5
- Jason Hunter采访
- Relpy to HR hunter
- Rootkit Hunter 使用介绍
- hdu 4568 Hunter
- ACM学习感悟——weekly training
- Github 教程
- laravel裸查分页
- 第2周项目时间类
- Java自学总结之六异常处理
- csu1527: Bounty Hunter
- 面向对象2 异常和多线程
- 安装grid
- POJ 1519 Digital Roots
- js行为样式分离
- 对Java的简单认识
- HttpClient gzip压缩post提交数据
- Java Collection与集合
- C++中String 注意