結果
| 問題 |
No.134 走れ!サブロー君
|
| コンテスト | |
| ユーザー |
古寺いろは
|
| 提出日時 | 2015-04-04 16:31:03 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,201 bytes |
| コンパイル時間 | 3,826 ms |
| コンパイル使用メモリ | 163,324 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-07-04 01:56:25 |
| 合計ジャッジ時間 | 2,041 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 8 WA * 7 |
ソースコード
#include "bits/stdc++.h"
using namespace std;
double dp[1 << 13][13];
double INF = 1e100;
double hyp(double A, double B){
return abs(A) + abs(B);
}
int main() {
int X0, Y0;
cin >> X0 >> Y0;
int N;
cin >> N;
vector<int> X(N);
vector<int> Y(N);
vector<double> W(N);
for (int i = 0; i < N; i++)
{
cin >> X[i] >> Y[i] >> W[i];
}
for (int i = 0; i < (1 << N); i++)
{
for (int j = 0; j < N; j++)
{
dp[i][j] = INF;
}
}
double sumW = 0;
for (int i = 0; i < N; i++)
{
sumW += W[i];
}
for (int i = 0; i < N; i++)
{
dp[(1 << N) - 1 - (1 << i)][i] = hyp(X0 - X[i], Y0 - Y[i]) * (sumW + 100) / 120;
}
for (int i = (1 << N) - 1; i >= 0; i--)
{
double SW = 100;
for (int j = 0; j < N; j++)
{
if ((i >> j) % 2) SW += W[j];
}
for (int j = 0; j < N; j++)
{
if (dp[i][j] == INF) continue;
for (int k = 0; k < N; k++)
{
if ((i >> k) % 2 == 0) continue;
dp[i - (1 << k)][k] = min(dp[i | (1 << k)][k], dp[i][j] + hyp(X[j] - X[k], Y[j] - Y[k]) * SW / 120);
}
}
}
double ans = INF;
for (int i = 0; i < N; i++)
{
ans = min(ans, dp[0][i] + (hyp(X0 - X[i], Y0 - Y[i]) * 100) / 120);
}
ans += sumW;
printf("%.14f\n", ans);
cin >> ans;
}
古寺いろは