思路
代码
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N=100010;
int cnt[N];
int main(){
int n,k;
cin >> n >> k;
for(int i=0;i<n;i++){
int x;
cin >> x;
cnt[x]++;
}
int ans=0;
if(!k){
for(int i=0;i<N;i++){
if(cnt[i])ans++;
}
cout << ans;
return 0;
}
for(int i=0;i<k;i++){
int a[N];
int idx=0;
for(int j=i;j<=N;j+=k){
a[idx++]=cnt[j];
}
int dp[N];
for(int j=0;j<idx;j++){
if(j==0)dp[j]=a[j];
else{
dp[j]=max(dp[j-2]+a[j],dp[j-1]);
}
}
ans+=dp[idx-1];
}
cout << ans;
}