結果
問題 | No.2955 Pizza Delivery Plan |
ユーザー | rlangevin |
提出日時 | 2024-11-10 21:04:42 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 961 ms / 2,000 ms |
コード長 | 1,080 bytes |
コンパイル時間 | 339 ms |
コンパイル使用メモリ | 82,432 KB |
実行使用メモリ | 172,672 KB |
最終ジャッジ日時 | 2024-11-10 21:05:17 |
合計ジャッジ時間 | 17,903 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 37 ms
53,120 KB |
testcase_01 | AC | 39 ms
52,608 KB |
testcase_02 | AC | 42 ms
59,648 KB |
testcase_03 | AC | 45 ms
62,592 KB |
testcase_04 | AC | 71 ms
71,424 KB |
testcase_05 | AC | 36 ms
53,504 KB |
testcase_06 | AC | 40 ms
60,032 KB |
testcase_07 | AC | 35 ms
53,504 KB |
testcase_08 | AC | 231 ms
121,960 KB |
testcase_09 | AC | 230 ms
122,348 KB |
testcase_10 | AC | 341 ms
125,520 KB |
testcase_11 | AC | 438 ms
129,748 KB |
testcase_12 | AC | 519 ms
133,720 KB |
testcase_13 | AC | 644 ms
137,972 KB |
testcase_14 | AC | 667 ms
141,552 KB |
testcase_15 | AC | 809 ms
145,308 KB |
testcase_16 | AC | 834 ms
149,420 KB |
testcase_17 | AC | 859 ms
152,748 KB |
testcase_18 | AC | 919 ms
157,068 KB |
testcase_19 | AC | 927 ms
161,460 KB |
testcase_20 | AC | 917 ms
164,920 KB |
testcase_21 | AC | 946 ms
169,552 KB |
testcase_22 | AC | 921 ms
172,672 KB |
testcase_23 | AC | 930 ms
172,456 KB |
testcase_24 | AC | 905 ms
172,200 KB |
testcase_25 | AC | 534 ms
133,260 KB |
testcase_26 | AC | 433 ms
129,568 KB |
testcase_27 | AC | 337 ms
126,080 KB |
testcase_28 | AC | 936 ms
157,420 KB |
testcase_29 | AC | 953 ms
161,724 KB |
testcase_30 | AC | 961 ms
172,664 KB |
ソースコード
N, K = map(int, input().split()) X, Y = [0] * (N + 1), [0] * (N + 1) for i in range(N): X[i + 1], Y[i + 1] = map(int, input().split()) N += 1 N2 = 1 << N inf = 1e18 dp = [[[inf] * (K + 1) for _ in range(N)] for _ in range(N2)] dp[1][0][K] = 0 def f(x1, y1, x2, y2): return ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5 for s in range(N2): for i in range(N): if (s >> i) & 1 == 0: continue for k in range(K + 1): if dp[s][i][k] > inf/2: continue dp[s][0][K] = min(dp[s][0][K], dp[s][i][k] + f(X[0], Y[0], X[i], Y[i])) for i in range(N): if (s >> i) & 1 == 0: continue for k in range(K + 1): if dp[s][i][k] > inf/2: continue if k == 0: continue for j in range(N): if (s >> j) & 1: continue ns = s | (1 << j) dp[ns][j][k - 1] = min(dp[ns][j][k - 1], dp[s][i][k] + f(X[i], Y[i], X[j], Y[j])) print(dp[-1][0][K])