Untitled

mail@pastecode.io avatar
unknown
plain_text
19 days ago
1.9 kB
1
Indexable
Never
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;


class Position {
public:
	int x, y;

	Position(int x, int y) : x(x), y(y) {}
};

int n, m, col, maxScore, sum;
int arr[101][101];
bool visited[101][101];
int spinX[] = { -1, -2, -2, -1 };
int spinY[] = { -2, -1, 1, 2 };




void tinhdiem(int arr[]) {
	sum = 0;
	sum += arr[0] * 5;
	if (arr[1] < 3) {
		sum += arr[1] * 10;
	}
	else if (arr[1] >= 3 && arr[1] < 6) {
		sum += 50;
		sum += 10 * (arr[1] - 3);
	}
	else if (arr[1] >= 6) {
		sum += (arr[1] / 6) * 150;
		sum += (arr[1] % 6) * 10;
	}
	if (arr[2] == 1) {
		sum += 30;
	}
	else if (arr[2] > 0) {
		sum += (arr[2] / 2) * 100;
		sum += (arr[2] % 2) * 30;
	}
	if (arr[3] == 1) {
		sum += 20;
	}
	else if (arr[3] == 2) {
		sum += 50;
	}
	else if (arr[3] == 3) {
		sum += 100;
	}
	else if (arr[3] == 4) {
		sum += 200;
	}
	else if (arr[3] >= 5) {
		sum += 500;
	}
	if (arr[4] == 1 && arr[5] == 1) {
		sum += 1000;
	}
	if (arr[6] == 1) {
		sum += 1;
	}
}



void Try(int r, int c, int arr1[]) {
	if (arr1[4] == 1 && arr1[5] == 0) {
		return;
	}
	if (r == 1) {
		
		if (arr[r][c] == 6) {
			tinhdiem(arr1);
			maxScore = max(sum, maxScore);
		}
		return;
	}

	for (int i = 0; i < 4; i++) {
		int nr = r + spinX[i];
		int nc = c + spinY[i];
		if (nr > 0 && nr <= n && nc > 0 && nc <= m && !visited[nr][nc]) {
			visited[nr][nc] = true;
			arr1[arr[nr][nc]]++;
			Try(nr, nc, arr1);
			arr1[arr[nr][nc]]--;
			visited[nr][nc] = false;
		}
	}
}



int main() {
	freopen("input.txt", "r", stdin);
	int tc;
	cin >> tc;

	for (int Case = 1; Case <= tc; Case++) {
		cin >> n >> m >> col;

		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= m; j++) {
				cin >> arr[i][j];
			}
		}

		maxScore = 0;
		sum = 0;
		int arr1[7] = { 0 };
		visited[n][col] = true;
		arr1[arr[n][col]]++;
		Try(n, col, arr1);

		cout << "Case #" << Case << endl;
		cout << maxScore << endl;
	}

	return 0;
}
Leave a Comment