結果
| 問題 |
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)