結果
| 問題 |
No.1606 Stuffed Animals Keeper
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-01-14 03:27:23 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 354 ms / 3,000 ms |
| コード長 | 1,615 bytes |
| コンパイル時間 | 140 ms |
| コンパイル使用メモリ | 82,352 KB |
| 実行使用メモリ | 77,880 KB |
| 最終ジャッジ日時 | 2024-09-28 01:56:11 |
| 合計ジャッジ時間 | 8,166 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 48 |
ソースコード
## https://yukicoder.me/problems/no/1606
def main():
N = int(input())
A = list(map(int, input().split()))
intervals = []
prev = 2
for a in A:
if a != 2:
if len(intervals) == 0:
array = [0, 0]
array[a] = 1
intervals.append(array)
else:
if prev != 2:
intervals[-1][a] += 1
else:
array = [0, 0]
array[a] = 1
intervals.append(array)
prev = a
value = 0
a1_value = 0
for a0, a1 in intervals:
value += a0 + a1
a1_value += a1
if a1_value == 0 or ( value - a1_value) == 0:
print(0)
return
dp = [float("inf") for _ in range(value + 1)]
dp[0] = 0
for a0, a1 in intervals:
new_dp = [float("inf") for _ in range(value + 1)]
total = a0 + a1
for i in range(value + 1):
# そのまま
new_dp[i] = min(new_dp[i], dp[i])
# 加える
if i + total <= value:
new_dp[i + total] = min(new_dp[i + total], dp[i] + a0)
dp = new_dp
answer = float("inf")
for total in range(value + 1):
if dp[total] == float("inf"):
continue
a0 = dp[total]
a1 = total - a0
# 相手側
a = a1_value - a1
if a0 == a:
answer = min(answer, a0)
if answer == float("inf"):
print(-1)
else:
print(answer)
if __name__ == "__main__":
main()