結果
問題 | No.134 走れ!サブロー君 |
ユーザー |
|
提出日時 | 2017-03-30 15:51:28 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 14 ms / 5,000 ms |
コード長 | 879 bytes |
コンパイル時間 | 492 ms |
コンパイル使用メモリ | 67,892 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-07-07 03:00:49 |
合計ジャッジ時間 | 1,008 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 15 |
ソースコード
#include<iostream>#include<algorithm>using namespace std;#define FOR(i, a, n) for(int i=a; i<n; i++)#define RFOR(i, a, n) for(int i=n-1; i>=a; i--)#define REP(i, n) FOR(i, 0, n)#define RREP(i, n) FOR(i, 0, n)#define INF 10000000double dp[(1 << 14)][14];int main(){int X[14], Y[14], N;double W[14], sumW = 0.0;cin >> X[0] >> Y[0] >> N;W[0] = 0.0;REP(i, N) {cin >> X[i + 1] >> Y[i + 1] >> W[i + 1];sumW += W[i + 1];}N++;REP(i, 1 << N) REP(j, N) dp[i][j] = INF;dp[0][0] = 0;REP(mask, 1 << N) {REP(i, N) {double sw = sumW;REP(j, N) if (mask&(1 << j)) sw -= W[j];REP(j, N) {if (mask&(1 << j)) continue;int md = abs(X[j] - X[i]) + abs(Y[j] - Y[i]);dp[mask | (1 << j)][j] = min(dp[mask | (1 << j)][j], dp[mask][i] + (md*(sw + 100.0) / 120.0) + W[j]);}}}printf("%.9lf\n", dp[(1 << N) - 1][0]);return 0;}