Submission #535706

#TimeUsernameProblemLanguageResultExecution timeMemory
535706sam571128Collecting Stamps 3 (JOI20_ho_t3)C++17
5 / 100
371 ms346904 KiB
#include <bits/stdc++.h>

#define int long long
#define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

using namespace std;

const int N = 13, T = 205;
int dp[1<<N][N][T], x[N], t[N], ans = 0;

signed main(){
    fastio
    int n,l;
    cin >> n >> l;

    for(int i = 0;i < n;i++){
        cin >> x[i];
    }

    for(int i = 0;i < n;i++){
        cin >> t[i];
    }

    for(int mask = 0; mask < (1<<n); mask++){
        for(int i = 0;i < n;i++){
            for(int tt = 0; tt < T;tt++){
                dp[mask][i][tt] = -1e18;
            }
        }
    }

    for(int i = 0;i < n;i++){
        int tmp = min(x[i],(0-x[i]+l)%l);
        dp[(1<<i)][i][tmp] = (tmp <= t[i]);
        ans = max(ans,dp[(1<<i)][i][tmp]);
    }

    for(int mask = 0;mask < (1<<n);mask++){
        for(int i = 0;i < n;i++){
            if(mask&(1<<i)){
                for(int j = 0;j < n;j++){
                    if(!(mask&(1<<j))){
                        for(int tt = 0; tt < T; tt++){
                            int tmp = min((x[j]-x[i]+l)%l,(x[i]-x[j]+l)%l);
                            if(tt+tmp < T){
                                dp[mask^(1<<j)][j][tt+tmp] = max(dp[mask^(1<<j)][j][tt+tmp],dp[mask][i][tt]+(tt+tmp <= t[j]));
                                ans = max(dp[mask^(1<<j)][j][tt+tmp],ans);
                            }
                        }
                    }
                }
            }
        }
    }

    cout << ans << "\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...