#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair i_i; typedef pair ll_i; typedef pair d_i; typedef pair ll_ll; typedef pair d_d; struct edge { int u, v; ll w; }; ll MOD = 1000000007; ll _MOD = 1000000009; double EPS = 1e-10; int main() { int X0, Y0; cin >> X0 >> Y0; int N; cin >> N; vector X(N + 1), Y(N + 1); vector W(N + 1); X[0] = X0; Y[0] = Y0; for (int i = 1; i <= N; i++) cin >> X[i] >> Y[i] >> W[i]; vector< vector > d(N + 1, vector(N + 1)); for (int i = 0; i <= N; i++) for (int j = 0; j <= N; j++) { int dx = X[i] - X[j], dy = Y[i] - Y[j]; d[i][j] = abs(dx) + abs(dy); //hypot(dx, dy); } vector< vector > dp(1 << (N + 1), vector(N + 1, DBL_MAX / 2)); dp[0][0] = 0; for (int S = 0; S < (1 << (N + 1)); S++) { double w = 0; for (int i = 0; i <= N; i++) if (!(S & (1 << i))) w += W[i]; for (int i = 0; i <= N; i++) for (int j = 0; j <= N; j++) { if (S & (1 << j)) continue; int T = S | (1 << j); dp[T][j] = min(dp[T][j], dp[S][i] + d[i][j] * (w + 100) / 120 + W[j]); } } printf("%.10f\n", dp[(1 << (N + 1)) - 1][0]); }