結果
| 問題 |
No.1606 Stuffed Animals Keeper
|
| コンテスト | |
| ユーザー |
puzneko
|
| 提出日時 | 2021-11-09 00:18:30 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 156 ms / 3,000 ms |
| コード長 | 915 bytes |
| コンパイル時間 | 422 ms |
| コンパイル使用メモリ | 82,816 KB |
| 実行使用メモリ | 87,808 KB |
| 最終ジャッジ日時 | 2024-11-17 04:08:32 |
| 合計ジャッジ時間 | 6,239 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 48 |
ソースコード
from sys import stdin
n, *a = map(int, stdin.read().split())
niku = []
nonbird = []
nowniku = 0
nownonbird = 0
sumniku = 0
for i in range(n):
if a[i] == 0:
nowniku += 1
sumniku += 1
nownonbird += 1
elif a[i] == 1:
nownonbird += 1
else:
if nownonbird != 0:
niku.append(nowniku)
nonbird.append(nownonbird)
nowniku = 0
nownonbird = 0
if nownonbird != 0:
niku.append(nowniku)
nonbird.append(nownonbird)
m = len(niku)
dp = [[n+1 for i in range(sumniku+1)] for j in range(m+1)]
dp[0][0] = 0
for i in range(m):
for j in range(sumniku+1):
dp[i+1][j] = min(dp[i+1][j],dp[i][j] + niku[i])
if j >= nonbird[i]:
dp[i+1][j] = min(dp[i+1][j],dp[i][j-nonbird[i]] + nonbird[i] - niku[i])
if dp[m][sumniku] == n+1:
print("{}".format(-1))
else:
print("{}".format(dp[m][sumniku]//2))
puzneko