求助 40分求调
查看原帖
求助 40分求调
332488
Wind_Journey楼主2022/7/22 15:10
#include <iostream>
using namespace std;
int a[1001000][4],n,turn[4]={-1,0,1},ans;
int check(int x){
	int sum=0;
	for(int i=0;i<3;i++){
		if(x+turn[i]>0&&x+turn[i]<=n){
			if(a[x+turn[i]][1]) sum++;
		}
	}
	return sum;
}
void dfs(int x){
	if(x==n+1){
		if(a[x][2]==0) ans++;
		return;
	}
	int temp=check(x);
	if(temp>a[x][2]) return;
	if(temp==a[x][2]){
		dfs(x+1);	
		return;
	}
	for(int i=0;i<a[x][2]-temp;i++){
		int x1=x-1,x2=x-2;
		if(x1<1) x1=1;
		if(x2<1) x2=1;
		for(int j=0;j<3;j++){
			int xx=x+turn[j];
			if(xx>0&&xx<=n&&!a[xx][1]){
				a[xx][1]=1;
				if(check(x1)==a[x1][2]&&check(x2)==a[x2][2]) dfs(x+1);
				a[xx][1]=0;
			}
		}
	}
	return;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		int temp;
		cin>>temp;
		a[i][2]=temp;
		if(temp==3){
			for(int j=0;j<3;i++){
				a[i+turn[j]][1]=1;
			}
		}
	}
	dfs(1);
	cout<<ans;
	return 0;
}

除了四个点AC外,其他点全部RE,如果把数组开大的话就会MLE,求大佬指点!!

2022/7/22 15:10
加载中...