谁来帮帮赛小息
Time Limit 1000MS
Memory Limit 256MB
题目链接https://csustacm.fun/problem/1109
真的水题QAQ。。。当时没看。
排完序之后直接按照最长上升子序列的做法来就行了,而且n2的算法都能过,只不过在状态转移的时候判断约束条件是否成立就行了,如果不成立就直接找下一个。
以下是AC代码:
#include <bits/stdc++.h>
using namespace std;
const int mac=5e3+10;
struct node
{
int eye,jiao;
bool friend operator <(node a,node b){
return a.jiao<b.jiao;
}
}a[mac];
int f[mac];
int main()
{
int n,w;
cin>>n>>w;
for (int i=1; i<=n; i++)
scanf ("%d",&a[i].eye);
for (int i=1; i<=n; i++)
scanf ("%d",&a[i].jiao);
sort(a+1,a+1+n);
int ans=0;
for (int i=1; i<=n; i++){
for (int j=1; j<=i; j++){
if (a[i].jiao>a[j].jiao) {
if (a[j].eye<=a[i].eye+w && a[j].eye>=a[i].eye-w)
f[i]=max(f[j]+1,f[i]);
ans=max(f[i],ans);
}
}
}
cout<<ans<<endl;
return 0;
}