Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
40行代码仅供参考#include<cmath> #include<cfloat> #include<cstdio> #include<iostream> #include<algorithm> using namespace std; const int N = 105, M = 45; int n, s[N]; double dp[N][M], ans = DBL_MAX; struct Point { int x, y; void read(void) { scanf("%d%d", &x, &y); } friend double operator - (Point &a, Point &b) { return sqrt((a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y)); } }G[N][M]; signed main(void) { scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", &s[i]); for (int j = 1; j <= s[i]; j++) G[i][j].read(); } for (int t = 1; t <= s[1]; t++) { for (int i = 3; i <= n; i++) for (int j = 1; j <= s[i]; j++) dp[i][j] = DBL_MAX; for (int i = 1; i <= s[2]; i++) dp[2][i] = (double)(G[2][i] - G[1][t]); for (int i = 3; i <= n; i++) for (int j = 1; j <= s[i]; j++) for (int k = 1; k <= s[i - 1]; k++) dp[i][j] = min(dp[i][j], dp[i - 1][k] + (G[i][j] - G[i - 1][k])); for (int i = 1; i <= s[n]; i++) ans = min(ans, dp[n][i] + (G[1][t] - G[n][i])); } cout << (int)(ans * 100) << endl; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator