제출 #628531

#제출 시각아이디문제언어결과실행 시간메모리
628531Abrar_Al_SamitCollecting Stamps 3 (JOI20_ho_t3)C++17
15 / 100
260 ms33088 KiB
#include<bits/stdc++.h>
using namespace std;

const int MX = 203;
const int INF = 2e9;

int n, L;
int pos[MX], T[MX];
int dp[MX][MX][MX];

int dist(int i, int j) {
  int ret = abs(pos[i]-pos[j]);
  return min(ret, L-ret);
}
int solve(int i, int j, int k) {
  if(k==0) return dist(0, i);
  if(n-(abs(j-i)-1)<k) return INF;
  int &ret = dp[i][j][k];
  if(ret!=-1) return ret;

  ret = INF;
  if(i<=j) {
    if(i>1) {
      if(solve(i-1, j, k-1)+dist(i, i-1)<=T[i]) {
        ret = min(ret, solve(i-1, j, k-1)+dist(i, i-1));
      }
      if(solve(i-1, j, k)!=INF) {
        ret = min(ret, solve(i-1, j, k)+dist(i, i-1));
      }
    } else {
      if(j==n && dist(0, i)<=T[i] && k==1) {
        ret = min(ret, dist(0, i));
      } 
    }
    if(j+1<=n) {
      if(solve(j+1, i, k-1)+dist(j+1, i)<=T[i]) {
        ret = min(ret, solve(j+1, i, k-1)+dist(j+1, i));
      }
      if(solve(j+1, i, k)!=INF) {
        ret = min(ret, solve(j+1, i, k)+dist(j+1, i));
      }
    }
  } else {
    if(i+1<=n) {
      if(solve(i+1, j, k-1)+dist(i, i+1)<=T[i]) {
        ret = min(ret, solve(i+1, j, k-1)+dist(i, i+1));
      }
      if(solve(i+1, j, k)!=INF) {
        ret = min(ret, solve(i+1, j, k)+dist(i, i+1));
      }
    }
    if(j>1) {
      if(solve(j-1, i, k-1)+dist(i, j-1)<=T[i]) {
        ret = min(ret, solve(j-1, i, k-1)+dist(i, j-1));
      }
      if(solve(j-1, i, k)!=INF) {
        ret = min(ret, solve(j-1, i, k)+dist(i, j-1));
      }
    } else {
      if(i==n && dist(0, i)<=T[i] && k==1) {
        ret = min(ret, dist(0, i));
      }
    }
  }
  return ret;
}
void PlayGround() {
  cin>>n>>L;
  for(int i=1; i<=n; ++i) {
    cin>>pos[i];
  }
  for(int i=1; i<=n; ++i) {
    cin>>T[i];
  }

  memset(dp, -1, sizeof dp);
  int ans = 0;
  for(int i=1; i<=n; ++i) {
    for(int j=1; j<=n; ++j) {
      for(int k=1; k<=n; ++k) {
        if(solve(i, j, k)<INF) {
          ans = max(ans, k);
        }
      }
    }
  }
  cout<<ans<<'\n';
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  PlayGround();
  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...