#include <bits/stdc++.h>
#include "jelly.h"
using namespace std;
typedef long long ll;
const int MAXN = 2e3 + 5;
const int MAXX = 1e4 + 5;
bool comp(const pair<int,int> &p1, const pair<int,int> &p2){
if(p1.first != p2.first) return p1.first < p2.first;
if(p1.second != p2.second) return p1.second < p2.second;
return false;
}
int dppref[MAXN][MAXX];
int dpsuff[MAXN][MAXX];
int find_maximum_unique(int x, int y, vector<int> a, vector<int> b){
vector<pair<int,int>> c;
int n = a.size();
for(int i = 0; i < n; ++i){
c.push_back({a[i], b[i]});
}
sort(c.begin(),c.end(),comp);
for(int i = 1; i <= n; ++i){
for(int j = 1; j <= x; ++j){
dppref[i][j] = dppref[i-1][j] + c[i-1].second;
if(j >= c[i].first) dppref[i][j] = min(dppref[i][j], dppref[i-1][j - c[i-1].first]);
}
}
for(int i = n; i > 0; --i){
for(int j = 1; j <= y; ++j){
dpsuff[i][j] = dpsuff[i+1][j];
if(j >= c[i-1].second){
dpsuff[i][j] = max(dpsuff[i][j], dpsuff[i+1][j - c[i-1].second] + 1);
}
}
}
int w = 0;
for(int i = 0; i <= n; ++i){
if(dppref[i][x] > y) continue;
w = max(w, i + dpsuff[i+1][y - dppref[i][x]]);
}
return w;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |