結果
問題 | No.2366 登校 |
ユーザー | 👑 SPD_9X2 |
提出日時 | 2023-06-30 22:28:18 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 2,596 ms / 4,000 ms |
コード長 | 1,331 bytes |
コンパイル時間 | 240 ms |
コンパイル使用メモリ | 82,088 KB |
実行使用メモリ | 162,668 KB |
最終ジャッジ日時 | 2024-06-12 07:51:13 |
合計ジャッジ時間 | 14,837 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 39 ms
54,432 KB |
testcase_01 | AC | 35 ms
53,508 KB |
testcase_02 | AC | 34 ms
52,688 KB |
testcase_03 | AC | 34 ms
54,136 KB |
testcase_04 | AC | 33 ms
53,024 KB |
testcase_05 | AC | 35 ms
53,404 KB |
testcase_06 | AC | 34 ms
53,384 KB |
testcase_07 | AC | 34 ms
54,124 KB |
testcase_08 | AC | 36 ms
55,300 KB |
testcase_09 | AC | 36 ms
53,600 KB |
testcase_10 | AC | 38 ms
54,612 KB |
testcase_11 | AC | 33 ms
54,036 KB |
testcase_12 | AC | 911 ms
105,640 KB |
testcase_13 | AC | 580 ms
101,824 KB |
testcase_14 | AC | 575 ms
102,444 KB |
testcase_15 | AC | 470 ms
101,508 KB |
testcase_16 | AC | 293 ms
97,244 KB |
testcase_17 | AC | 557 ms
101,616 KB |
testcase_18 | AC | 895 ms
105,812 KB |
testcase_19 | AC | 697 ms
103,268 KB |
testcase_20 | AC | 449 ms
101,284 KB |
testcase_21 | AC | 552 ms
101,780 KB |
testcase_22 | AC | 800 ms
104,792 KB |
testcase_23 | AC | 730 ms
138,232 KB |
testcase_24 | AC | 743 ms
137,884 KB |
testcase_25 | AC | 2,444 ms
162,668 KB |
testcase_26 | AC | 2,596 ms
160,876 KB |
ソースコード
""" N,M が小さいんだよな つまり、Tが大きい場合は無視で構わない 後は… dp[x][y][T] = x,y に時刻Tで居る為に必要な最小コスト で良いか 時刻は, T-(N-1-M-1) -200 ~ T 位まで考慮しておけばいいかな """ import sys from sys import stdin import heapq N,M,K,T = map(int,stdin.readline().split()) AB_to_CD = [[None] * M for i in range(N)] for i in range(K): A,B,C,D = map(int,stdin.readline().split()) A -= 1 B -= 1 AB_to_CD[A][B] = (C,D) dp = [[[float("inf")] * 500 for i in range(M)] for j in range(N)] dp[0][0][0] = 0 q = [ (0,0,0,0) ] while q: cost,x,y,t = heapq.heappop(q) if (x,y) == (N-1,M-1) and t <= T: print (cost) sys.exit() if dp[x][y][t] != cost: continue if t <= N+M+10: for nx,ny in ( (x+1,y),(x-1,y),(x,y-1),(x,y+1) ): if 0 <= nx < N and 0 <= ny < M and dp[nx][ny][t+1] > dp[x][y][t]: dp[nx][ny][t+1] = dp[x][y][t] heapq.heappush( q,(dp[nx][ny][t+1] , nx , ny , t+1) ) if AB_to_CD[x][y] != None: C,D = AB_to_CD[x][y] nexT = max(-200 , t-C+1) if dp[x][y][nexT] > D + dp[x][y][t]: dp[x][y][nexT] = D + dp[x][y][t] heapq.heappush( q,(dp[x][y][nexT] , x , y , nexT) ) print (-1)