結果
| 問題 |
No.2423 Merge Stones
|
| コンテスト | |
| ユーザー |
gew1fw
|
| 提出日時 | 2025-06-12 14:44:07 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,935 bytes |
| コンパイル時間 | 247 ms |
| コンパイル使用メモリ | 82,544 KB |
| 実行使用メモリ | 76,936 KB |
| 最終ジャッジ日時 | 2025-06-12 14:45:01 |
| 合計ジャッジ時間 | 6,794 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 10 TLE * 1 -- * 61 |
ソースコード
def main():
import sys
sys.setrecursionlimit(1 << 25)
n, K = map(int, sys.stdin.readline().split())
A = list(map(int, sys.stdin.readline().split()))
C = list(map(int, sys.stdin.readline().split()))
max_color = 51
possible = [[] for _ in range(max_color)]
for c in range(max_color):
for d in range(max_color):
if abs(c - d) <= K:
possible[c].append(d)
max_total = 0
for start in range(n):
stones = []
for i in range(n):
stones.append(A[(i + start) % n])
colors = []
for i in range(n):
colors.append(C[(i + start) % n])
dp = [[[0] * (max_color) for _ in range(n)] for __ in range(n)]
for i in range(n):
c = colors[i]
dp[i][i][c] = stones[i]
for l in range(2, n+1):
for i in range(n - l + 1):
j = i + l - 1
for k in range(i, j):
for c1 in range(max_color):
if dp[i][k][c1] == 0:
continue
for c2 in possible[c1]:
if c2 >= max_color:
continue
if dp[k+1][j][c2] == 0:
continue
total = dp[i][k][c1] + dp[k+1][j][c2]
for new_c in [c1, c2]:
if new_c >= max_color:
continue
if dp[i][j][new_c] < total:
dp[i][j][new_c] = total
for i in range(n):
for j in range(i, n):
for c in range(max_color):
if dp[i][j][c] > max_total:
max_total = dp[i][j][c]
print(max_total)
if __name__ == "__main__":
main()
gew1fw