Submission #1265078

#TimeUsernameProblemLanguageResultExecution timeMemory
1265078danglayloi1Collecting Stamps 3 (JOI20_ho_t3)C++20
100 / 100
169 ms266904 KiB
#include <bits/stdc++.h> #define ii pair<int, int> #define fi first #define se second #define inf 0x3f3f3f3f3f3f3f3f using namespace std; using ll = long long; const ll mod=1e9+7; const int nx=405; int n, l, a[nx], t[nx], ans=0; ll dp[205][nx][205][2]; int dis(int u, int v) { if(u<v) return v-u; return l-u+v; } void mini(ll &x, ll y) { if(x>y) x=y; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>l; n++; for(int i = 2; i <= n; i++) cin>>a[i]; for(int i = 2; i <= n; i++) cin>>t[i]; a[1]=0, t[1]=-1; for(int i = n+1; i <= 2*n; i++) a[i]=a[i-n], t[i]=t[i-n]; memset(dp, 0x3f, sizeof(dp)); dp[n+1][n+1][0][0]=dp[n+1][n+1][0][1]=0; for(int i = n+1; i >= 1; i--) { for(int j = i; j <= min(2*n, i+n-1); j++) { for(int k = 0; k <= n; k++) { ll tim=dp[i][j][k][0]; mini(dp[i-1][j][k+(tim+dis(a[i-1], a[i])<=t[i-1])][0], tim+dis(a[i-1], a[i])); mini(dp[i][j+1][k+(tim+dis(a[i], a[j+1])<=t[j+1])][1], tim+dis(a[i], a[j+1])); tim=dp[i][j][k][1]; mini(dp[i][j+1][k+(tim+dis(a[j], a[j+1])<=t[j+1])][1], tim+dis(a[j], a[j+1])); mini(dp[i-1][j][k+(tim+dis(a[i-1], a[j])<=t[i-1])][0], tim+dis(a[i-1], a[j])); } } } for(int i = n+1; i >= 1; i--) for(int j = i; j <= min(2*n, i+n-1); j++) for(int k = 0; k <= n; k++) if(min(dp[i][j][k][0], dp[i][j][k][1])<inf) ans=max(ans, k); 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...