제출 #724620

#제출 시각아이디문제언어결과실행 시간메모리
724620vjudge1Collecting Stamps 3 (JOI20_ho_t3)C++17
5 / 100
2 ms1620 KiB
#include <bits/stdc++.h> using namespace std; #define fi first #define se second #define pb push_back typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const int MAXN = 1e5+10; const ll INF = 0x3f3f3f3f3f3f3f3f; int n; vector<ll> arr, tempo; int dp[405][805], cmp[205]; int calc(int i, int at, ll curr, int nxd, int nxu){ if(i==n) return 0; if(dp[i][at]!=-1) return dp[i][at]; int valnxd=nxd%n, valnxu=(nxu-1)%n; int ret=0; if(tempo[nxd]>=curr+abs(arr[at]-arr[nxd]) && !cmp[valnxd]){ cmp[valnxd]=1; ret=1+calc(i+1, nxd, curr+abs(arr[at]-arr[nxd]), nxd-1, nxu); cmp[valnxd]=0; } else ret=calc(i+1, nxd, curr+abs(arr[at]-arr[nxd]), nxd-1, nxu); if(tempo[nxu]>=curr+abs(arr[nxu]-arr[at]) && !cmp[valnxu]){ cmp[valnxu]=1; ret=max(ret, 1+calc(i+1, nxu, curr+abs(arr[nxu]-arr[at]), nxd, nxu+1)); cmp[valnxu]=0; } else ret=max(ret, calc(i+1, nxu, curr+abs(arr[nxu]-arr[at]), nxd, nxu+1)); return dp[i][at]=ret; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); // freopen("shuffle.in","r",stdin); // freopen("shuffle.out","w",stdout); ll l; cin >> n >> l; for(int i=0;i<n;i++){ ll x; cin >> x; arr.pb(x); } for(int i=0;i<n;i++) arr.pb(arr[i]+l); arr.pb(2*l); for(int i=0;i<n;i++) arr.pb(arr[i]+2*l); for(int i=0;i<n;i++) arr.pb(arr[i]+3*l); tempo.resize(4*n+1); for(int i=0;i<n;i++) cin >> tempo[i]; for(int i=0;i<n;i++) tempo[i+n]=tempo[i]; tempo[2*n]=-1; for(int i=0;i<n;i++) tempo[i+2*n+1]=tempo[i]; for(int i=0;i<n;i++) tempo[i+3*n+1]=tempo[i]; memset(dp, -1, sizeof dp); cout << calc(0, 2*n, 0ll, 2*n-1, 2*n+1) << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...