蒟蒻求助,暴力枚举,结果全部RE
  • 板块P4933 大师
  • 楼主cwtcwt
  • 当前回复1
  • 已保存回复1
  • 发布时间2021/7/28 21:41
  • 上次更新2023/11/4 12:49:05
查看原帖
蒟蒻求助,暴力枚举,结果全部RE
41147
cwtcwt楼主2021/7/28 21:41

数组空间也开得够大啊,为什么会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;
}
2021/7/28 21:41
加载中...