| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1304055 | exoworldgd | Jelly Flavours (IOI20_jelly) | C++20 | 0 ms | 0 KiB |
#pragma GCC optimize("O5,unroll-loops,inline,fast-math")
#pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")
#include <bits/stdc++.h>
#define exoworldgd cin.tie(0)->sync_with_stdio(0), cout.tie(0)
#define ll long long
#define pii pair<int,int>
using namespace std;
const int N=1e5+5,M=1e9+7;
const ll inf=1e18;
int find_maximum_unique(int x, int y, vector<int> A, vector<int> B) {
ll n=A.size(),mx=0;
pii v[n+1];
for(int i=0; i<n; i++) v[i]={A[i],B[i]};
sort(v,v+n);
ll dp[n+1][x+1];
for(int i=1; i<=n; i++){
int ca=v[i-1].first, cb=v[i-1].second;
for(int j=0; j<=x; j++){
dp[i][j]=dp[i-1][j]+cb;
if(j>=ca) dp[i][j]=min(dp[i][j],dp[i-1][j-ca]);
}
}
for(int k=0; k<=n; k++){
ll mn=inf;
for(int j=0; j<=x; j++) mn=min(mn,dp[k][j]);
if(mn>y) continue;
ll rem=y-mn,s=0;
vector<int> c;
for(int i=k; i<n; i++) c.push_back(v[i].second);
sort(c.begin(),c.end());
for(int i:c) if(rem>=i) rem-=i,s++;
mx=max(mx,k+s);
}
return mx;
}
