#include<bits/stdc++.h>
using namespace std;
#define N 105
int n,k,x,a,b,p[N],f[N][2],res,ans;
bool vis[N];
int main()
{
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
if(x>100)
while(1);
p[x]++;
}
if(!k)
{
for(int i=1;i<=100;i++)
{
if(p[i])
ans++;
}
}
else
{
for(int i=1;i<=min(100,k);i++)
{
memset(f,0,sizeof(f));
f[i][1]=res=p[i];
for(int j=i+k;j<=100;j+=k)
{
f[j][0]=max(f[j-k][0],f[j-k][1]);
f[j][1]=f[j-k][0]+p[j];
res=max(f[j][0],f[j][1]);
}
ans+=res;
}
}
printf("%d\n",ans);
return 0;
}
题目中说 ai≤100,但是这代码 TLE 了