結果
問題 | No.161 制限ジャンケン |
ユーザー |
![]() |
提出日時 | 2020-06-02 17:00:24 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 386 ms / 5,000 ms |
コード長 | 1,533 bytes |
コンパイル時間 | 1,365 ms |
コンパイル使用メモリ | 82,816 KB |
実行使用メモリ | 85,164 KB |
最終ジャッジ日時 | 2024-11-24 03:41:04 |
合計ジャッジ時間 | 5,295 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 16 |
ソースコード
import sysdef input(): return sys.stdin.readline().strip()def list2d(a, b, c): return [[c] * b for i in range(a)]def list3d(a, b, c, d): return [[[d] * c for j in range(b)] for i in range(a)]def list4d(a, b, c, d, e): return [[[[e] * d for j in range(c)] for j in range(b)] for i in range(a)]def ceil(x, y=1): return int(-(-x // y))def INT(): return int(input())def MAP(): return map(int, input().split())def LIST(N=None): return list(MAP()) if N is None else [INT() for i in range(N)]def Yes(): print('Yes')def No(): print('No')def YES(): print('YES')def NO(): print('NO')sys.setrecursionlimit(10 ** 9)INF = 10 ** 19MOD = 10 ** 9 + 7EPS = 10 ** -10g, c, p = MAP()S = input()N = len(S)def calc(a, b):if a == b:return 1if a == 'G' and b == 'C' or a == 'C' and b == 'P' or a == 'P' and b == 'G':return 3if a == 'G' and b == 'P' or a == 'C' and b == 'G' or a == 'P' and b == 'C':return 0dp = list2d(g+1, c+1, -INF)nxt = list2d(g+1, c+1, -INF)dp[0][0] = 0for i, s in enumerate(S):for j in range(g+1):for k in range(c+1):l = i - j - kif l < 0:continueif j+1 <= g:nxt[j+1][k] = max(nxt[j+1][k], dp[j][k] + calc('G', s))if k+1 <= c:nxt[j][k+1] = max(nxt[j][k+1], dp[j][k] + calc('C', s))if l+1 <= p:nxt[j][k] = max(nxt[j][k], dp[j][k] + calc('P', s))dp = nxtnxt = list2d(g+1, c+1, -INF)ans = dp[g][c]print(ans)