結果
| 問題 | No.134 走れ!サブロー君 | 
| コンテスト | |
| ユーザー |  ckawatak | 
| 提出日時 | 2018-12-11 22:42:53 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                WA
                                 
                             | 
| 実行時間 | - | 
| コード長 | 1,136 bytes | 
| コンパイル時間 | 264 ms | 
| コンパイル使用メモリ | 82,248 KB | 
| 実行使用メモリ | 80,044 KB | 
| 最終ジャッジ日時 | 2024-09-23 05:11:57 | 
| 合計ジャッジ時間 | 2,921 ms | 
| ジャッジサーバーID (参考情報) | judge2 / judge5 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 7 WA * 8 | 
ソースコード
X,Y = list(map(int, input().split(' ')))
N = int(input())
weights = [0]
customers = [(X,Y,0)]
for _ in range(N):
    x,y,weight = tuple(map(float, input().split(' ')))
    weights.append(weight)
    customers.append((x,y))
N = N + 1
W = sum(weights)
    
distances = []
for i in range(N):
    row = []
    for j in range(N):
        distance = abs(customers[i][0] - abs(customers[j][0])) + \
            abs(customers[i][1] - abs(customers[j][1]))
        row.append(distance)
    distances.append(row)
def time_to_take(weight):
    return (weight + 100) / 120
def weight(S, weights):
    weight = W
    i = 0
    while 0 < S:
        if S & 1 == 1:
            weight = weight - weights[i]
        S = S >> 1
        i = i + 1
    return weight
dp = []
for i in range(1 << N):
    dp.append([float('inf') for _ in range(N)])
dp[(1 << N) - 1][0] = 0
for S in reversed(range(0, (1 << N) - 1)):
    for v in range(N):
        for u in range(N):
            if not (S >> u & 1):
                dp[S][v] = min(dp[S][v], dp[S | 1 << u][u] + distances[v][u] * time_to_take(weight(S, weights)) + weights[u])
print("%.2f" % dp[0][0])
            
            
            
        