結果
問題 | No.134 走れ!サブロー君 |
ユーザー |
![]() |
提出日時 | 2016-03-21 03:42:52 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 7 ms / 5,000 ms |
コード長 | 1,947 bytes |
コンパイル時間 | 681 ms |
コンパイル使用メモリ | 85,052 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-10-14 17:15:12 |
合計ジャッジ時間 | 1,348 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 15 |
ソースコード
/* -*- coding: utf-8 -*-** 134.cc: No.134 走れ!サブロー君 - yukicoder*/#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<iostream>#include<string>#include<vector>#include<map>#include<set>#include<stack>#include<list>#include<queue>#include<deque>#include<algorithm>#include<numeric>#include<utility>#include<complex>#include<functional>using namespace std;/* constant */const int MAX_N = 13;const int NBITS = 1 << MAX_N;const double DINF = 1e60;/* typedef *//* global variables */int xs[MAX_N], ys[MAX_N];double wis[MAX_N], wsums[NBITS], dp[NBITS][MAX_N];/* subroutines */inline int mdist(int x0, int y0, int x1, int y1) {return abs(x1 - x0) + abs(y1 - y0);}inline double btime(int bits) { return (wsums[bits] + 100) / 120; }/* main */int main() {int sx, sy;cin >> sx >> sy;int n;cin >> n;int nbits = 1 << n;double wsum = 0.0;for (int i = 0; i < n; i++) {cin >> xs[i] >> ys[i] >> wis[i];wsum += wis[i];}for (int bits = 0; bits < nbits; bits++) {wsums[bits] = wsum;for (int i = 0, bi = 1; i < n; i++, bi <<= 1) {if (bits & bi) wsums[bits] -= wis[i];dp[bits][i] = DINF;}}for (int i = 0, bi = 1; i < n; i++, bi <<= 1)dp[bi][i] = mdist(sx, sy, xs[i], ys[i]) * btime(0) + wis[i];for (int bits = 0; bits < nbits; bits++)for (int i = 0; i < n; i++)if (dp[bits][i] < DINF)for (int j = 0, bj = 1; j < n; j++, bj <<= 1)if (! (bits & bj)) {int bitsj = bits | bj;double d =dp[bits][i] + mdist(xs[i], ys[i], xs[j], ys[j]) * btime(bits)+ wis[j];if (dp[bitsj][j] > d) dp[bitsj][j] = d;}double mint = DINF;for (int i = 0; i < n; i++)if (dp[nbits - 1][i] < DINF) {double t =dp[nbits - 1][i] + mdist(xs[i], ys[i], sx, sy) * 100.0 / 120;if (mint > t) mint = t;}printf("%.9lf\n", mint);return 0;}