Submission #1304057

#TimeUsernameProblemLanguageResultExecution timeMemory
1304057exoworldgdJelly Flavours (IOI20_jelly)C++20
100 / 100
137 ms154808 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];
    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 j=0; j<=x; j++) dp[0][j]=0;
    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,c[n-k];
        for(int i=k; i<n; i++) c[i-k]=v[i].second;
        sort(c,c+n-k);
        for(int i=0; i<n-k; i++) if(rem>=c[i]) rem-=c[i],s++;
        mx=max(mx,k+s);
    }
    return mx;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...