Untitled

 avatar
unknown
plain_text
2 years ago
1.7 kB
4
Indexable
#include<iostream>
using namespace std;
int K, R, M, N;
int a[20][2];
bool visited[20];
int toado[100][3];
int mang[20][100];
int visitGH[100];
int answer = 0;
int X[10];

bool checkKC(int x1, int y1, int x2, int y2) {
	if((x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2) > R*R) { 
		return false;
	}
	return true;
}

int tinhN(int x) {
	int soN = 0;
	for(int i = 0; i < N; i++) {
		if(mang[x][i] == 1 && visitGH[i] == 0) {
			soN += toado[i][2];
			visitGH[i]++;
		} else if(mang[x][i] == 1 && visitGH[i] != 0) { 
			visitGH[i]++;
		}
	}
	return soN;
}

void resetGH (int x) { 
	for(int i = 0; i < N; i++) {
		if(mang[x][i] == 1) { 
			visitGH[i]--;
		}
	} 
}

void reset() { 
	for(int i = 0; i < M; i++) { 
		for(int j = 0; j < N; j++) { 
			mang[i][j] = 0;
		}
		visitGH[i] = 0;
		visited[i] = false;
	}
}

void BT(int k, int sum, int index) { 
	if(k == K) {
		if(answer < sum) {
			answer = sum;
		}
		return;
	}
	for(int i = index; i < M; i++) {
		if(!visited[i]) { 
			visited[i] = true;
			BT(k + 1, sum + tinhN(i), i);
			resetGH(i);
			visited[i] = false;
		}
	}
}

int main() {
	//freopen("input.txt", "r", stdin);
	int T;
	cin>>T;
	for(int tc = 1; tc <= T; tc++) { 
		cin>>K>>R>>M;
		for(int i = 0; i < M; i++) { 
			cin>>a[i][0]>>a[i][1];
		}
		cin>>N;
		reset();
		for(int i = 0; i < N; i++) { 
			cin>>toado[i][0]>>toado[i][1]>>toado[i][2];
		}

		for(int i = 0; i < M; i++) { 
			for(int j = 0; j < N; j++) { 
				if(checkKC(a[i][0], a[i][1], toado[j][0], toado[j][1])) {
					mang[i][j] = 1; 
				}
			}
		}
		answer = 0;
		BT(0, 0, 0);
		cout<<"#"<<tc<<" "<<answer<<endl;
	}
	return 0;
}