Untitled

 avatar
unknown
c_cpp
a year ago
858 B
5
Indexable
#include <bits/stdc++.h>
using namespace std;

const int MAX = 5000;

int N, a[MAX], b[MAX], memo[MAX], me;
map<int, bool> mp;

int dp(int n) {
  if(n > 1000) return MAX;
  if(n < me) return MAX;
  if(memo[n] != -1) return memo[n];
  if(mp.count(n)) return 1;
  memo[n] = MAX;
  for(int i = 0; i < N; ++i) {
    if(b[i] - a[i] == 0 || a[i] > n) continue;
    memo[n] = min(memo[n], dp(n + (b[i] - a[i])) + 1);
  }
  return memo[n];
}

int main() {
  while(cin>>N && N) {
    memset(memo, -1, sizeof(memo));
    mp.clear();
    me = MAX;
    for(int i = 0; i < N; ++i) {
      cin>>a[i];
      me = min(me, a[i]);
      mp[a[i]] = 1;
    }
    for(int i = 0; i < N; ++i) {
      cin>>b[i];
    }
    int ans = (mp.count(100) ? 0 : dp(100));
    if(ans > 1000) cout<<"cavaleiro morreu\n";
    else cout<<ans<<'\n';
  }
}
Editor is loading...
Leave a Comment