Submission #230117

#TimeUsernameProblemLanguageResultExecution timeMemory
230117AMO5Collecting Stamps 3 (JOI20_ho_t3)C++98
100 / 100
318 ms509816 KiB
// READ & UNDERSTAND // ll, int overflow, array bounds, memset(0) // special cases (n=1?), n+1 (1-index) // do smth instead of nothing & stay organized // WRITE STUFF DOWN #include <bits/stdc++.h> using namespace std; #define fi first #define se second #define pb push_back #define all(x) (x).begin(), (x).end() #define MOD 1000000007 typedef long long ll; typedef pair <int, int> ii; typedef pair <ll, ll> pll; typedef vector<int> vi; typedef vector<ll> vll; typedef long double ld; ll INF=LLONG_MAX; int const mxn=404; int dp[mxn][mxn][mxn][2]; //le,ri,cnt,where int x[mxn],t[mxn],n,L; int dist(int a, int b){ if(a>b)swap(a,b); return min(b-a,L-(b-a)); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); //freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); cin >> n >> L; for(int i=0; i<n; i++){ cin >> x[i]; x[i+n+1] = x[i]; } for(int i=0; i<n; i++){ cin >> t[i]; t[i+n+1] = t[i]; } for(int i=0; i<=2*n; i++) for(int j=0; j<=2*n; j++) for(int k=0; k<=n; k++) for(int l=0; l<2; l++) dp[i][j][k][l]=1e9+1; int ans = 0; dp[n][n][0][0]=0; for(int len=0; len<=n; len++){ for(int i=n-len; i<=n; i++){ int j=i+len; for(int k=0; k<=n; k++){ for(int l=0; l<2; l++){ if(dp[i][j][k][l]>1e9)continue; int pos=(l==0?i:j); ans=max(ans,k); if(k==n)continue; //left if(i){ int cur=dp[i][j][k][l]+dist(x[pos],x[i-1]); dp[i-1][j][k+(cur<=t[i-1])][0]=min(dp[i-1][j][k+(cur<=t[i-1])][0],cur); } //right if(j<2*n){ int cur=dp[i][j][k][l]+dist(x[pos],x[j+1]); dp[i][j+1][k+(cur<=t[j+1])][1]=min(dp[i][j+1][k+(cur<=t[j+1])][1],cur); } } } } } cout << ans << 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...