96pts求调
查看原帖
96pts求调
1323292
chenyu114楼主2025/8/1 15:18
#include<bits/stdc++.h>
using namespace std;
int n,a[1000],cnt,s[1000],vis[1000],sum;
int sc[5]={3,1,0,0};
void read(int &x)
{
	char c=getchar();
	x=0;
	int flag=1;
	while(!isdigit(c))
	{
		if(c=='-')flag=-1;
		c=getchar();
	}
	while(isdigit(c))
	{
		x=x*10+c-48;
		c=getchar();
	}
	x*=flag;
}
void write(int x)
{
    if(x<0)
        putchar('-'),x=-x;
    if(x>9)
        write(x/10);
    putchar(x%10+'0');
    return;
}
void dfs(int x,int y)
{
	if(s[x]>a[x])
	{
		return;
	}
	if(s[x]+((n-y+1)*3)<a[x]) 
	{     
	    return;
	}
	if(y==n&&a[x]-s[x]==2)
	{
		return;
	} 
	if(x==n&&s[x]==a[x])
	{
		cnt++;
		return;
	}
	if(y==n)
	{
		int t=a[x]-s[x];
		if(t==2)return ;
		s[y]+=sc[t];
		dfs(x+1,x+2);
		s[y]-=sc[t];
	}else
	{
		s[x]+=3;
		dfs(x,y+1);
		s[x]-=3;
		
		s[y]+=3; 
		dfs(x,y+1);
		s[y]-=3;
		
		s[x]+=1;
		s[y]+=1;
		dfs(x,y+1);
		s[x]-=1;
		s[y]-=1;
	}
}
int main()
{
	read(n); 
	for(int i=1 ; i <= n; i++)
	{
		read(a[i]);
	}
	if(n==1)
    {
        if(a[1]==0)
        {
            cnt=1;
        }
    }else
    {	
		dfs(1,2);
    }
	write(cnt);
	return 0;
} 
2025/8/1 15:18
加载中...