# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
641796 | 2022-09-17T15:48:28 Z | dattranxxx | Jelly Flavours (IOI20_jelly) | C++17 | 0 ms | 0 KB |
#include "jelly.h" #include <vector> using namespace std; const int N = 2e3 + 5, M = 1e4 + 5; using ii = pair<int, int>; ii a[N], dp[N][M]; ii best(ii& u, ii& v) { if (u.first == v.first) return u.second < v.second ? u : v; return u.first > v.first ? u : v; } int n, X, Y; int find_maximum_unique(int _x, int _y, std::vector<int> _a, std::vector<int> _b) { n = _a.size(), X = _x, Y = _y; for (int i = 1; i <= n; ++i) a[i] = {_a[i-1], _b[i-1]}; sort(a + 1, a + n + 1, [&](ii& u, ii& v) { return u.second < v.second; }); for (int x = 0; x <= X; ++x) dp[0][x] = {0, 0}; for (int i = 1; i <= n; ++i) for (int x = 0; x <= X; ++x) { dp[i][x] = dp[i-1][x]; if (x >= a[i].first) { auto p = dp[i-1][x-a[i].first]; p.first++; dp[i][x] = best(dp[i][x], p); } if (dp[i-1][x].second + a[i].second <= Y) { auto p = dp[i-1][x]; p.first++; p.second += a[i].second; dp[i][x] = best(dp[i][x], p); } } return n; }