Untitled

 avatar
unknown
plain_text
2 years ago
1.3 kB
12
Indexable
#include <iostream>
using namespace std;
int dy[]={-1,0,1};
int N, Max, cnt, visitBomb, flag;
int Map[13][5];
void backtrack(int k, int col){
	if (k==0){
		if (cnt>Max)
			Max=cnt;
		flag=1;
		return;
	}
	//Dung bom (chua dung thi dung hoac khong dung)
	if (visitBomb==0){
		for (int i=k-1; i>=k-5 && i>=0; i--){
			for (int j=0; j<5; j++){
				if (Map[i][j]==2)
					Map[i][j]=-1;
			}
		}
		visitBomb=1;
		backtrack(k,col);
		for (int i=k-1; i>=k-5 && i>=0; i--){
			for (int j=0; j<5; j++){
				if (Map[i][j]==-1)
					Map[i][j]=2;
			}
		}
		visitBomb=0;
	}
	//Di chuyen
	for (int j=0; j<3; j++){
		int nc=col+dy[j];
		if (nc>=0 && nc<5){
			if (Map[k-1][nc]==0 || Map[k-1][nc]==-1)
				backtrack(k-1,nc);
			else if (Map[k-1][nc]==1){
				cnt++;
				backtrack(k-1,nc);
				cnt--;
			}
			else if (Map[k-1][nc]==2 && cnt>=1){
				cnt--;
				backtrack(k-1,nc);
				cnt++;
			}
		}
	}

}

int main(){
	freopen("input.txt", "r", stdin);
	int T;
	cin>>T;
	for (int tc=1; tc<=T; tc++){
		cin>>N;
		for (int i=0; i<N; i++){
			for (int j=0; j<5; j++){
				cin>>Map[i][j];
			}
		}
		Max=0;
		cnt=0;
		visitBomb=0;
		flag=0;
		backtrack(N,2);
		if (flag==1)
			cout<<"Case #"<<tc<<endl<<Max<<endl;
		else 
			cout<<"Case #"<<tc<<endl<<-1<<endl;
	}

	return 0;
}
Editor is loading...
Leave a Comment