POJ 2137 Cowties
来源:互联网 发布:java商城项目订单 编辑:程序博客网 时间:2024/05/17 01:45
题意: n个点集,在每个点集里面选一个点,把所有的点按照编号连接成一个环,使连线长度最短。
解法是,枚举第一个点集的每一个点,设为起始点,逐步递推求长度,最后选择答案最小的那个。
需要注意的是,最后的答案是要输出整数,直接强制类型转换,用%.0f是会WA的。
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <vector>using namespace std;struct point{ double x; double y;};vector<point> v[110];double dist(point a,point b){ return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));}double dis[110][50];int main(){ int n,i,j,t,k,l,s[110]; double td,ans; point p; scanf("%d",&n); for (i=1; i<=n; i++) { scanf("%d",s+i); v[i].clear(); for (j=0; j<s[i]; j++) { scanf("%lf%lf",&p.x,&p.y); v[i].push_back(p); } } ans=-1; for (i=0; i<s[1]; i++) { for (j=1; j<=n; j++) { for (k=0; k<s[j]; k++) { dis[j][k]=999999999; } } for (j=0; j<s[2]; j++) { dis[2][j]=dist(v[1][i],v[2][j]); } for (j=3; j<=n; j++) { for (k=0; k<s[j]; k++) { for (l=0; l<s[j-1]; l++) { td=dist(v[j-1][l],v[j][k]); dis[j][k]=dis[j][k]>td+dis[j-1][l]?td+dis[j-1][l]:dis[j][k]; } } } for (j=0; j<s[n]; j++) { td=dist(v[1][i],v[n][j]); dis[1][i]=dis[1][i]>td+dis[n][j]?td+dis[n][j]:dis[1][i]; } if (ans == -1 || ans > dis[1][i]) ans=dis[1][i]; }// for (j=1; j<=n; j++)// {// for (k=0; k<v[j].size(); k++)// {// printf("%f ",dis[j][k]);// dis[j][k]=999999999;// }// printf("\n");// } ans*=100.0; printf("%d\n",(int)ans);}
- POJ 2137 Cowties
- poj 2137 Cowties dp
- poj 2137 Cowties dp
- poj 2137 Cowties
- POJ 2137 Cowties DP
- poj 2137 Cowties
- POJ 2137 Cowties 笔记
- Cowties
- POJ2137——Cowties
- POJ2137:Cowties(dp)
- POJ 2137 DP
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- MFC 界面线程和工作者线程
- ios各种动画效果
- Properties的使用
- File类listRoots()及list()的两种方法的使用
- 文件的相对路径和绝对路径
- POJ 2137 Cowties
- HBase技术介绍
- 利用正则表达式找出文件里的所有邮件地址
- Android开发中总是生成*.out.xml问题
- 正则表达式之替换——replaceAll()方法
- easyui中edatagrid 的正确用法
- 正则表达式之切割——将正则表达式和split()方法相结合
- 正则表达式之匹配——match()方法
- 正则表达式之查询——Pattern类