Submission #1202100

#TimeUsernameProblemLanguageResultExecution timeMemory
1202100enzyJelly Flavours (IOI20_jelly)C++20
10 / 100
116 ms155204 KiB
#include "jelly.h"
#include <bits/stdc++.h>
using namespace std;
const int maxn=2001;
const int maxx=10001;
int dp[maxn][2*maxx], a[maxn], b[maxn];
int find_maximum_unique(int x, int y, vector<int> A, vector<int> B){
    int n=A.size();
    vector<pair<int,int>>process;
    for(int i=0;i<n;i++) process.push_back({A[i],B[i]});
    sort(process.begin(),process.end());
    int id=0;
    for(pair<int,int> p : process){
        id++;
        a[id]=p.first; b[id]=p.second;
    }
    // com essa ordenação vale a pena gastar primeiro tudo na loja A, e dps gastar tudo na loja B
    int resp=0;
    for(int i=1;i<=n;i++){
        for(int j=0;j<=x+y;j++){
            dp[i][j]=dp[i-1][j];
            int c=j;
            if(j>x){ // já gastei tudo na loja A, ent tenho q gastar na loja B
                c-=x; // usar y agr
                if(c>=b[i]) dp[i][j]=max(dp[i][j],dp[i-1][j-b[i]]+1);
                // ainda gastar tudo em A
                if(a[i]<=x) dp[i][j]=max(dp[i][j],dp[i-1][x-a[i]]+1);
            }else{
                if(c>=a[i]) dp[i][j]=max(dp[i][j],dp[i-1][j-a[i]]+1);
            }
            resp=max(resp,dp[i][j]);
        }
    }
    return resp;
}
#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...