设 \(f_{i,j}\) 为当前选了 \(i\) 个,上一个选了 \(j\) 的最大长度
#include<bits/stdc++.h>
using namespace std;
#define int long long
template<typename T>void ignored(T x){}
int n;
int a[1001];
int b[1001];
int f[1001][1001];
signed main(){ignored(freopen("alice.in","r",stdin));ignored(freopen("alice.out","w",stdout));ignored(scanf("%lld",&n));for(int i=1;i<=n;++i){ignored(scanf("%lld",&a[i]));}for(int i=1;i<=n;++i){ignored(scanf("%lld",&b[i]));}int ans=0;for(int i=1;i<=n;++i){for(int j=1;j<=n;++j){for(int k=0;k<j;++k){if(a[k]*b[i-1]<a[j]){f[i][j]=max(f[i][j],f[i-1][k]+1);ans=max(ans,f[i][j]);}}}}cout<<ans<<'\n';
}