結果
問題 |
No.1606 Stuffed Animals Keeper
|
ユーザー |
|
提出日時 | 2021-12-10 23:51:09 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 462 ms / 3,000 ms |
コード長 | 898 bytes |
コンパイル時間 | 174 ms |
コンパイル使用メモリ | 82,048 KB |
実行使用メモリ | 312,960 KB |
最終ジャッジ日時 | 2024-07-18 18:40:07 |
合計ジャッジ時間 | 10,223 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 48 |
ソースコード
N = int(input()) A = list(map(int,input().split())) B = [(0,0)] x = 0 y = 0 for i in range(N): if A[i] == 2 or i == N-1: if A[i] == 0: x += 1 elif A[i] == 1: y += 1 if x == y == 0: continue B.append((x,y)) x = 0 y = 0 elif A[i] == 0: x += 1 elif A[i] == 1: y += 1 INF = float('inf') dp = [[INF] * 10001 for _ in range(len(B))] def check(t): if 0 <= t < 10001: return True else: return False dp[0][5000] = 0 for i in range(1,len(B)): x,y = B[i] for s in range(10001): if dp[i-1][s] == INF: continue if check(s-x): dp[i][s-x] = min(dp[i-1][s] + x,dp[i][s-x]) if check(s+y): dp[i][s+y] = min(dp[i-1][s] + y,dp[i][s+y]) ans = dp[len(B)-1][5000] if ans == INF: print(-1) else: print(ans//2)