結果
問題 | No.572 妖精の演奏 |
ユーザー | roaris |
提出日時 | 2019-12-18 14:37:43 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,625 bytes |
コンパイル時間 | 143 ms |
コンパイル使用メモリ | 82,052 KB |
実行使用メモリ | 128,204 KB |
最終ジャッジ日時 | 2024-07-06 11:17:08 |
合計ジャッジ時間 | 8,864 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 165 ms
86,944 KB |
testcase_01 | AC | 150 ms
86,220 KB |
testcase_02 | AC | 193 ms
86,840 KB |
testcase_03 | AC | 186 ms
87,276 KB |
testcase_04 | AC | 134 ms
83,744 KB |
testcase_05 | WA | - |
testcase_06 | AC | 284 ms
97,464 KB |
testcase_07 | WA | - |
testcase_08 | WA | - |
testcase_09 | WA | - |
testcase_10 | WA | - |
testcase_11 | AC | 659 ms
128,016 KB |
testcase_12 | WA | - |
testcase_13 | AC | 647 ms
127,760 KB |
testcase_14 | WA | - |
testcase_15 | AC | 655 ms
127,404 KB |
testcase_16 | AC | 643 ms
127,472 KB |
testcase_17 | AC | 647 ms
128,028 KB |
testcase_18 | AC | 267 ms
91,372 KB |
testcase_19 | AC | 81 ms
77,976 KB |
ソースコード
import sys sys.setrecursionlimit(100000) def rec(i, j, k): if memo[i][j][k]!=-1: return memo[i][j][k] if i==0: memo[i][j][k] = A[j][k] return A[j][k] res = 0 for l in range(m): if res<A[j][k]+rec(i-1, k, l): res = A[j][k]+rec(i-1, k, l) to[V-i][j][k] = (k, l) memo[i][j][k] = res return res n = int(input()) n -= 1 m = int(input()) A = [list(map(int, input().split())) for _ in range(m)] V = 1000 memo = [[[-1]*m for _ in range(m)] for _ in range(V+1)] to = [[[0]*m for _ in range(m)] for _ in range(V)] for i in range(m): for j in range(m): rec(V, i, j) ans = 0 for i in range(m): for j in range(m): flag = [[-1]*m for _ in range(m)] cur_i, cur_j = i, j cnt = 0 flag[cur_i][cur_j] = cnt scores = [A[cur_i][cur_j]] while True: cur_i, cur_j = to[cnt][cur_i][cur_j] #print(cur_i, cur_j) if flag[cur_i][cur_j]>=0: #print(scores) ini = flag[cur_i][cur_j] loop = cnt+1-flag[cur_i][cur_j] #print(ini, loop) if n>=ini: s1 = sum(scores[:ini]) s2 = sum(scores[ini:]) ans = max(ans, s1+(n-ini)//loop*s2+sum(scores[ini:ini+(n-ini)%loop])) else: ans = max(ans, sum(scores[:n])) break cnt += 1 flag[cur_i][cur_j] = cnt scores.append(A[cur_i][cur_j]) print(ans)