제출 #1169173

#제출 시각아이디문제언어결과실행 시간메모리
1169173mkolko21Jelly Flavours (IOI20_jelly)C++20
54 / 100
234 ms194044 KiB
#include <iostream>
#include <vector>
using namespace std;

int dp[2'007][10'007];
int dyn[207][507][507];

int find_maximum_unique(int x, int y, vector<int> fir, vector<int> sec)
{
    int n=fir.size();
    if(n<205 && x<505 && y<505)
    {
        for(int a=0; a<n; a++){
            for(int i=0; i<=x; i++){
                for(int j=0; j<=y; j++){
                    dyn[a+1][i][j]=max(dyn[a+1][i][j],dyn[a][i][j]);
                    if(i+fir[a]<=x)
                        dyn[a+1][i+fir[a]][j]=max(dyn[a+1][i+fir[a]][j],dyn[a][i][j]+1);
                    if(j+sec[a]<=y)
                        dyn[a+1][i][j+sec[a]]=max(dyn[a+1][i][j+sec[a]],dyn[a][i][j]+1);
                }
            }
        }
        return dyn[n][x][y];
    }
    for(int a=0; a<n; a++){
        for(int i=0; i<=x; i++){
            dp[a+1][i]=max(dp[a+1][i],dp[a][i]);
            if(sec[a]==0)
                dp[a+1][i]=max(dp[a+1][i],dp[a][i]+1);
            if(i+fir[a]<=x)
                dp[a+1][i+fir[a]]=max(dp[a][i]+1,dp[a+1][i+fir[a]]);
        }
    }
    int odp=dp[n][x];
    if(y!=0){
        if(sec[0]==0)
            odp=n;
        else
            odp+=y/sec[0];
    }
    return min(odp,n);
}
#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...