結果

問題 No.1606 Stuffed Animals Keeper
ユーザー horitaka1999
提出日時 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
権限があれば一括ダウンロードができます

ソースコード

diff #

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)
0