Submission #471654

#TimeUsernameProblemLanguageResultExecution timeMemory
471654FatihSolakCollecting Stamps 3 (JOI20_ho_t3)C++17
100 / 100
551 ms539936 KiB
#include <bits/stdc++.h>
#define N 205
#define int long long
using namespace std;
int x[2*N],t[2*N];
int dp[2*N][2*N][N][2];
int L;
int go(int a,int b,int dir){
    if(dir == 0){
        return (x[a] - x[b] + L)%L;
    }
    return (x[b] - x[a] +L)%L;
}
void solve(){
    for(int i=0;i<2*N;i++){
        for(int j=0;j<2*N;j++){
            for(int c=0;c<N;c++){
                for(int d=0;d<2;d++){
                    dp[i][j][c][d] = 2e18;
                }
            }
        }
    }
    int n;
    cin >> n >> L;
    n++;
    dp[n+1][n+1][0][0] = 0;
    for(int i=2;i<=n;i++){
        cin >> x[i];
    }
    for(int i=2;i<=n;i++){
        cin >> t[i];
    }
    for(int i=n+1;i<=2*n;i++){
        x[i] = x[i-n];
        t[i] = t[i-n];
    }
    for(int len=2;len<=n;len++){
        for(int l=1;l<=n+1;l++){
            int r = l+len-2;
            for(int c=0;c<=n;c++){
                dp[l-1][r][c + (dp[l][r][c][0] + go(l,l-1,0) <= t[l-1])][0] = min(dp[l-1][r][c + (dp[l][r][c][0] + go(l,l-1,0) <= t[l-1])][0], dp[l][r][c][0] + go(l,l-1,0));
                dp[l][r+1][c + (dp[l][r][c][0] + go(l,r+1,1) <= t[r+1])][1] = min(dp[l][r+1][c + (dp[l][r][c][0] + go(l,r+1,1) <= t[r+1])][1], dp[l][r][c][0] + go(l,r+1,1));
                dp[l-1][r][c + (dp[l][r][c][1] + go(r,l-1,0) <= t[l-1])][0] = min(dp[l-1][r][c + (dp[l][r][c][1] + go(r,l-1,0) <= t[l-1])][0], dp[l][r][c][1] + go(r,l-1,0));
                dp[l][r+1][c + (dp[l][r][c][1] + go(r,r+1,1) <= t[r+1])][1] = min(dp[l][r+1][c + (dp[l][r][c][1] + go(r,r+1,1) <= t[r+1])][1], dp[l][r][c][1] + go(r,r+1,1));
            }
        }
    }
    int ans = 0;
    for(int i=0;i<2*N;i++){
        for(int j=0;j<2*N;j++){
            for(int c=0;c<N;c++){
                for(int d=0;d<2;d++){
                    if(dp[i][j][c][d] != 2e18)ans = max(ans,c);
                }
            }
        }
    }
    cout << ans;
}

int32_t main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    #ifdef Local
    freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);
    #endif
    int t=1;
    //cin>>t;
    while(t--){
        solve();
    }
    #ifdef Local
    cout<<endl<<fixed<<setprecision(2)<<1000.0 * clock() / CLOCKS_PER_SEC<< " milliseconds ";
    #endif
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...