結果
問題 | No.2840 RGB Plates |
ユーザー | Shirotsume |
提出日時 | 2024-08-09 23:19:09 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 1,613 ms / 2,000 ms |
コード長 | 1,395 bytes |
コンパイル時間 | 1,150 ms |
コンパイル使用メモリ | 103,564 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-08-18 01:01:49 |
合計ジャッジ時間 | 18,274 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 28 |
ソースコード
#include <iostream> #include <vector> #include <algorithm> #include <limits.h> using namespace std; const long long inf = LLONG_MAX / 2; int main() { int n; cin >> n; vector<int> a(n); for (int i = 0; i < n; i++) cin >> a[i]; sort(a.begin(), a.end()); vector<long long> dp0(40001, -inf); vector<long long> dp1(40001, -inf); dp0[0] = 0; for (int i = 0; i < n; i++) { vector<long long> new_dp0 = dp0; vector<long long> new_dp1 = dp1; for (int j = 0; j <= 40000; j++) { if (dp0[j] != -inf) { new_dp0[j] = max(new_dp0[j], dp0[j] + a[i]); } if (dp1[j] != -inf) { new_dp1[j] = max(new_dp1[j], dp1[j] + a[i]); new_dp1[abs(j - a[i])] = max(new_dp1[abs(j - a[i])], dp1[j]); } if (dp0[j] != -inf) { new_dp1[abs(j - a[i])] = max(new_dp1[abs(j - a[i])], dp0[j]); } if (j + a[i] <= 40000) { if (dp1[j] != -inf) { new_dp1[j + a[i]] = max(new_dp1[j + a[i]], dp1[j]); } if (dp0[j] != -inf) { new_dp1[j + a[i]] = max(new_dp1[j + a[i]], dp0[j]); } } } dp0 = new_dp0; dp1 = new_dp1; } cout << (dp1[0] <= 0 ? -1 : dp1[0]) << endl; return 0; }