結果

問題 No.1606 Stuffed Animals Keeper
ユーザー horitaka1999
提出日時 2021-12-10 23:49:30
言語 PyPy3
(7.3.15)
結果
MLE  
実行時間 -
コード長 853 bytes
コンパイル時間 186 ms
コンパイル使用メモリ 82,176 KB
実行使用メモリ 698,240 KB
最終ジャッジ日時 2024-07-18 18:37:28
合計ジャッジ時間 11,782 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 47 MLE * 1
権限があれば一括ダウンロードができます

ソースコード

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