题目在这里
简单读题,发现这道题就是一个比较单纯的DP,上手写代码。
暴力写了一遍,果然TLE了,那就老老实实写DP吧。
开始使用pair建立的数组下标映射,但是忘了有相同数字这一茬,WA了两发过后,排序然后用map映射,轻松过题。
代码如下:
#include<bits/stdc++.h>
using namespace std;
const int MAX_N = 1e5+10;
int n,k,a[MAX_N],Max=0,dp[MAX_N];
map<int,int>b;
int main(){
ios::sync_with_stdio(0);
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);
for(int i=1;i<=n;i++){
dp[i]=1;
b[a[i]]=i;
}
for(int i=1;i<=n;i++){
if(a[i]==a[i-1]){
dp[i]=dp[i-1];
}else if(b[a[i]-k]!=0){
dp[i]+=dp[b[a[i]-k]];
}
}
for(int i=1;i<=n;i++){
Max = max(Max,dp[i]);
}
cout<<Max;
return 0;
}