Submission #391277

#TimeUsernameProblemLanguageResultExecution timeMemory
391277wildturtleCollecting Stamps 3 (JOI20_ho_t3)C++14
100 / 100
204 ms258416 KiB
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll a,b,c,d,i,e,f,g,n,m,k,l,A[202],dp[202][202][4][202],ans,T[202],j;
int main() {
    cin>>n>>l;
    for(ll i=1;i<=n;i++) {
        cin>>A[i];
    }
    for(ll i=1;i<=n;i++) {
        cin>>T[i];
    }
    n++;
    for(ll i=0;i<=n;i++) {
        for(ll j=0;j<=n;j++) {
            for(ll r=0;r<=1;r++) {
                for(ll cnt=0;cnt<=n;cnt++) {
                    dp[i][j][r][cnt]=1e18;
                }
            }
        }
    }
    A[n]=l;
    T[0]=-1;
    dp[0][n][0][0]=0;
    dp[0][n][1][0]=0;
    ans=0;
    for(ll sz=n-1;sz>=1;sz--) {
        for(ll i=0;i+sz<=n;i++) {
            j=i+sz;
            for(ll cnt=0;cnt<=n;cnt++) {
                if(i!=0) dp[i][j][0][cnt]=min(dp[i][j][0][cnt],dp[i-1][j][0][cnt]+A[i]-A[i-1]);
                if(j!=n) dp[i][j][1][cnt]=min(dp[i][j][1][cnt],dp[i][j+1][1][cnt]+A[j+1]-A[j]);
                if(cnt!=0) {
                    if(i!=0 && T[i]>=dp[i-1][j][0][cnt-1]+A[i]-A[i-1])
                    dp[i][j][0][cnt]=min(dp[i][j][0][cnt],dp[i-1][j][0][cnt-1]+A[i]-A[i-1]);
                    if(j!=n && T[j]>=dp[i][j+1][1][cnt-1]+A[j+1]-A[j]) 
                    dp[i][j][1][cnt]=min(dp[i][j][1][cnt],dp[i][j+1][1][cnt-1]+A[j+1]-A[j]);
                }
                dp[i][j][0][cnt]=min(dp[i][j][0][cnt],dp[i][j][1][cnt]+l-A[j]+A[i]);
                dp[i][j][1][cnt]=min(dp[i][j][1][cnt],dp[i][j][0][cnt]+l-A[j]+A[i]);
                if(dp[i][j][0][cnt]!=1e18 || dp[i][j][1][cnt]!=1e18) ans=max(ans,cnt);
            }
        }
    }
    cout<<ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...