結果
問題 | No.1606 Stuffed Animals Keeper |
ユーザー | ぷら |
提出日時 | 2021-07-16 22:08:08 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 150 ms / 3,000 ms |
コード長 | 1,077 bytes |
コンパイル時間 | 2,151 ms |
コンパイル使用メモリ | 197,228 KB |
最終ジャッジ日時 | 2025-01-23 02:03:47 |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 48 |
ソースコード
#include <bits/stdc++.h> using namespace std; constexpr int inf = 1001001001; int dp[5005][10005]; int main() { int N; cin >> N; for(int i = 0; i <= N; i++) { for(int j = 0; j <= N; j++) { dp[i][j] = inf; } } int sum = 0; vector<int>A(N); pair<int,int>x; vector<pair<int,int>>tmp; for(int i = 0; i < N; i++) { cin >> A[i]; if(A[i] == 2) { tmp.push_back(x); x = {0,0}; } else if(A[i] == 0) { x.first++; sum++; } else { x.second++; } } tmp.push_back(x); dp[0][0] = 0; for(int i = 0; i < tmp.size(); i++) { for(int j = 0; j <= N; j++) { dp[i+1][j] = min(dp[i+1][j],dp[i][j]+tmp[i].first); dp[i+1][j+tmp[i].first+tmp[i].second] = min(dp[i+1][j+tmp[i].first+tmp[i].second],dp[i][j]+tmp[i].second); } } if(dp[tmp.size()][sum] == inf) { cout << -1 << endl; } else { cout << dp[tmp.size()][sum]/2 << endl; } }