STL题解来一发
2025-03-26 10:30:39
发布于:福建
16阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
const int N=30000;
int n,d,maxn,a[N+1];
map<int,int>dp[N+1];
signed main(){
cin>>n>>d;
for(int i=1,x;i<=n;i++){
cin>>x;
a[x]++;
}
dp[d][d]=a[d];
for(int i=d;i<=N;i++){
for(auto j:dp[i]){
maxn=max(maxn,j.second);
if(i<=N-j.first+1 && j.first>1) dp[i+j.first-1][j.first-1]=max(dp[i+j.first-1][j.first-1],j.second+a[i+j.first-1]);
if(i<=N-j.first) dp[i+j.first][j.first]=max(dp[i+j.first][j.first],j.second+a[i+j.first]);
if(i<=N-j.first-1 && j.first<N) dp[i+j.first+1][j.first+1]=max(dp[i+j.first+1][j.first+1],j.second+a[i+j.first+1]);
}
}
cout<<maxn;
return 0;
}
这里空空如也
有帮助,赞一个