제출 #535711

#제출 시각아이디문제언어결과실행 시간메모리
535711sam571128Collecting Stamps 3 (JOI20_ho_t3)C++17
0 / 100
16 ms8512 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 = 16; int dp[1<<N][N][N], x[N], t[N], ans = 0; //mask, at, taken, dp[i][j][k] => time 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 j = 0;j <= n;j++){ dp[mask][i][j] = 1e18; } } } for(int i = 0;i < n;i++){ int tmp = min(x[i],(0-x[i]+l)%l); int take = (tmp <= t[i]); dp[(1<<i)][i][take] = 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 take = 0;take <= n;take++){ if(dp[mask][i][take]==1e18) continue; int tmp = min((x[j]-x[i]+l)%l,(x[i]-x[j]+l)%l); int tt = dp[mask][i][take]+tmp; dp[mask^(1<<j)][j][take+(tt<=t[j])] = tt; } } } } } } int ans = 0; for(int mask = 0;mask < (1<<n);mask++){ for(int i = 0;i < n;i++){ for(int j = 0;j <= n;j++){ if(dp[mask][i][j]!=1e18){ ans = max(ans,j); } } } } 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...