提交时间:2024-10-20 16:31:11

运行 ID: 33733

#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define p_b push_back #define m_p make_pair using namespace std; typedef long long ll; const int maxn=1e6+10,mod=998244353; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; }int n,a[maxn],tg[maxn],dp[505][2]; void slv(){ n=read();up(i,1,n)a[i]=read(),tg[a[i]]=1;int res=0; up(i,1,500){ memset(dp,0,sizeof(dp)); if(tg[i])dp[501][1]=1;else dp[501][0]=1; down(j,501,i){ if(!tg[j]){ (dp[j-1][0]+=dp[j][0])%=mod; (dp[j-1][1]+=dp[j][1])%=mod; }else { up(k,1,min(i+1,j))if((j-k+1)*2>=j){ (dp[j-k][(i+1)==k]+=dp[j][0])%=mod; (dp[j-k][1]+=dp[j][1])%=mod; } } } (res+=dp[i][1])%=mod; }cout<<(res+1)%mod; }int main(){ //freopen("mod.in","r",stdin); //freopen("mod.out","w",stdout); slv(); fclose(stdin); fclose(stdout); return 0; }