Submission #201937

#TimeUsernameProblemLanguageResultExecution timeMemory
201937Osama_AlkhodairyCollecting Stamps 3 (JOI20_ho_t3)C++17
100 / 100
167 ms135544 KiB
#include <bits/stdc++.h> using namespace std; #define finish(x) return cout << x << endl, 0 #define ll long long const int N = 205; int n, L; ll dp[N][N][2][N]; vector <int> x, t; void minimize(ll &x, ll y){ x = min(x, y); } int pos(int l, int r, int dir){ if(dir == 0) return l; return r; } int dist(int l, int r, int dir){ l = x[l]; r = x[r]; if(dir == 0){ if(r <= l) return l - r; return l + L - r; } if(l <= r) return r - l; return L - l + r; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); for(int l = 0 ; l < N ; l++){ for(int r = 0 ; r < N ; r++){ for(int dir = 0 ; dir < 2 ; dir++){ for(int ans = 0 ; ans < N ; ans++){ dp[l][r][dir][ans] = 1e18; } } } } cin >> n >> L; x.resize(n); for(auto &i : x) cin >> i; t.resize(n); for(auto &i : t) cin >> i; x.insert(x.begin(), 0); t.insert(t.begin(), 0); n++; dp[0][0][0][0] = dp[0][0][1][0] = 0; for(int len = 0 ; len < n - 1 ; len++){ for(int l = 0 ; l < n ; l++){ int r = (l + len) % n; if(l != 0 && l <= r) continue; int pre = (l - 1 + n) % n; int nex = (r + 1) % n; for(int dir = 0 ; dir < 2 ; dir++){ for(int ans = 0 ; ans <= len ; ans++){ ll d = dist(pos(l, r, dir), pre, 0) + dp[l][r][dir][ans]; minimize(dp[pre][r][0][ans + (d <= t[pre])], d); d = dist(pos(l, r, dir), nex, 1) + dp[l][r][dir][ans]; minimize(dp[l][nex][1][ans + (d <= t[nex])], d); } } } } int res = 0; for(int l = 0 ; l < n ; l++){ for(int r = 0 ; r < n ; r++){ for(int dir = 0 ; dir < 2 ; dir++){ for(int ans = 0 ; ans < n ; ans++){ if(dp[l][r][dir][ans] != 1e18){ res = max(res, ans); } } } } } cout << res << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...