数组空间也开得够大啊,为什么会RE呢?
求救QWQ
#include<bits/stdc++.h>
#define MOD 998244353
using namespace std;
int n,h[5010],b[5010],temp[5010],ans=0;
inline int read()
{
int f=1,x=0;
char ch=getchar();
while (ch<'0' || ch>'9') { if (ch=='-') f=-1;
ch=getchar();}
while (ch>='0' && ch<='9') { x=x*10+ch-'0';
ch=getchar();}
return f*x;
}
int dfs(int k,int t,int num) //放到第k根,要放的还剩t根
{ //第k根的编号是num
if (t==0) { ans++;
ans%=MOD;
return 0;
}
if (k>n) return 0;
if ( (n-k)<t ) return 0; //还有n-k根能放,已经不够
for (int i=num;i<=n;++i)
{ int flag=0;
if (b[i]==0)
{if (k==2) { temp[0]=h[i]-temp[k-1];
flag=1; }
if (h[i]-temp[k-1]==temp[0])
{b[i]=1;
temp[k]=h[i];
//if ()
dfs(k+1,t-1,num);
b[i]=0;
temp[k]=0;
if (flag==1) temp[0]=0;
}
}
}
}
int main()
{
scanf("%d",&n);
for (int i=1;i<=n;++i)
scanf("%d",&h[i]);
for (int i=1;i<=n;++i)
for (int j=1;j<=n;++j)
{ b[j]=1; temp[1]=h[j];
dfs(2,i,j);
b[j]=0; temp[1]=0;
ans%=MOD;
}
ans=(ans+n)%MOD;
printf("%d",ans%MOD);
return 0;
}