結果
問題 |
No.1606 Stuffed Animals Keeper
|
ユーザー |
![]() |
提出日時 | 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))