結果
| 問題 |
No.1948 足し算するだけのパズルゲーム(1)
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-03-20 20:20:46 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 159 ms / 2,000 ms |
| コード長 | 2,139 bytes |
| コンパイル時間 | 355 ms |
| コンパイル使用メモリ | 82,844 KB |
| 実行使用メモリ | 117,860 KB |
| 最終ジャッジ日時 | 2025-03-20 20:22:14 |
| 合計ジャッジ時間 | 4,105 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 27 |
ソースコード
def main():
import sys
input = sys.stdin.read().split()
idx = 0
H = int(input[idx])
idx += 1
W = int(input[idx])
idx += 1
A = [[0] * (W + 1) for _ in range(H + 1)]
for i in range(1, H + 1):
for j in range(1, W + 1):
A[i][j] = int(input[idx])
idx += 1
INF = -float('inf')
dp0 = [[INF] * (W + 1) for _ in range(H + 1)]
dp1 = [[INF] * (W + 1) for _ in range(H + 1)]
dp0[1][1] = A[1][1]
for i in range(1, H + 1):
for j in range(1, W + 1):
if i == 1 and j == 1:
continue
max0 = INF
if i > 1:
prev = dp0[i-1][j]
if prev > A[i][j]:
current = prev + A[i][j]
if current > max0:
max0 = current
if j > 1:
prev = dp0[i][j-1]
if prev > A[i][j]:
current = prev + A[i][j]
if current > max0:
max0 = current
dp0[i][j] = max0
max1 = INF
if i > 1:
prev = dp0[i-1][j]
if prev != INF and prev <= A[i][j]:
if prev > max1:
max1 = prev
if j > 1:
prev = dp0[i][j-1]
if prev != INF and prev <= A[i][j]:
if prev > max1:
max1 = prev
if i > 1:
prev = dp1[i-1][j]
if prev > A[i][j]:
current = prev + A[i][j]
if current > max1:
max1 = current
if j > 1:
prev = dp1[i][j-1]
if prev > A[i][j]:
current = prev + A[i][j]
if current > max1:
max1 = current
dp1[i][j] = max1
final_attack = A[H][W]
if dp0[H][W] > final_attack or dp1[H][W] > final_attack:
print("Yes")
else:
print("No")
if __name__ == "__main__":
main()
lam6er