Submission #1229035

#TimeUsernameProblemLanguageResultExecution timeMemory
1229035ripolasBouquet (EGOI24_bouquet)C++20
24 / 100
21 ms3564 KiB
#include <bits/stdc++.h>
using namespace std;
int main(){
    cin.tie(nullptr);
    ios_base::sync_with_stdio(false);
    bool firstCode = true;
    bool smallLR = true;
    int n;
    cin>>n;
    vector<pair<int,int>> a(n);
    vector<int> dp(n,1);
    for(int i = 0;i<n;i++){
        int l,r;
        cin>>l>>r;
        if(r!=0&&l!=r){
            firstCode = false;
        }
        if(r>2||l>2){
            smallLR = false;
        }
        a[i] = {l,r};
    }
    if(!firstCode){
        int ans = 0;
        for(int i = 0;i<n;i++){
            if(!smallLR){
                for(int j = 0;j<i;j++){
                    if(max(a[j].second,a[i].first)<i-j){
                        dp[i] = max(dp[i],dp[j]+1);
                    }
                }
            }else{
                for(int j = i-5;j<i;j++){
                    if(max(a[j].second,a[i].first)<i-j){
                        dp[i] = max(dp[i],dp[j]+1);
                    }
                }
            }
            ans= max(ans,dp[i]);
        }
        cout<<ans<<endl;
    }else{
        vector<int> maxUntil(n,1);
        for(int i = 0;i<n;i++){
            if(i-a[i].first-1>=0){
                dp[i] = max(dp[i],maxUntil[i-a[i].first-1]+1);
            }else{
                dp[i] = 1;
            }
            if(i!=0){
                maxUntil[i] = max(maxUntil[i-1],dp[i]);
            }else{
                maxUntil[i] = dp[i];
            }
        }
        cout<<maxUntil[n-1]<<endl;
    }
}
/*
4
1 0
1 0
1 0
4 0
*/
#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...