Untitled

 avatar
unknown
plain_text
2 years ago
1.7 kB
2
Indexable
#include<iostream>
using namespace std;
int K,R;
int M;
int Nha_hang[30][2];
int N;
int Nguoi[105][2] ;
int visit_nh[30];
int visit_nguoi[105];
int so_nguoi[105];
int mt[30][105];
int max_sum =0;
bool ketnoi(int i,int j)
	{
	if((Nha_hang[i][0] - Nguoi[j][0]) * (Nha_hang[i][0] - Nguoi[j][0]) + (Nha_hang[i][1] - Nguoi[j][1]) * (Nha_hang[i][1] - Nguoi[j][1])  <= R*R)
		return true;
	else return false;
	}
void BT(int k,int summ)
	{
	cout << k <<" " << summ << endl;
	if(k == K){
		if(summ > max_sum ) { max_sum = summ;}
		return ;
		}
	for(int i=1; i<=M; i++)
		{
		if(visit_nh[i] ==0 ){
			visit_nh[i] = 1;
			for(int j=1; j <= N; j++)
				{
				if(mt[i][j] == 1 && visit_nguoi[j] ==0)
					{
					visit_nguoi[j] = k+5;
					summ += so_nguoi[j];
					}
				}
			BT(k+1, summ);
			visit_nh[i] = 0;
			for(int j=1; j <= N; j++)
				{
				if(mt[i][j] == 1 && visit_nguoi[j] ==k+5)
					{
					visit_nguoi[j] = 0;
					summ -= so_nguoi[j];
					}
				}
			}
		}
	}
int main()
	{
	int t;
	cin >>t;
	for(int stt=1; stt <=t; stt++)
		{
		cin >> K >> R;
		cin >> M;
		for(int i=1; i<=M; i++)
			{
			cin >> Nha_hang[i][0] >> Nha_hang[i][1];
			visit_nh[i] = 0;
			}
		cin >> N;
		for(int i=1; i<=N; i++)
			{
			cin >> Nguoi[i][0] >> Nguoi[i][1] >> so_nguoi[i];
			visit_nguoi[i] =0;
			}
		//////////////////////////////
		for(int i=1; i<=M;i++)
			{
			for(int j=1; j<=N; j++)
				{
				mt[i][j] = ketnoi(i,j);
				}
			}
		////////////////////
		 /*for(int i=1; i<=M;i++)
			{
			for(int j=1; j<=N; j++)
				{
				cout << mt[i][j] << " ";
				}
			cout << endl;
			}*/
		 BT(0,0);
		 cout << "Case #" << stt << " " << max_sum << endl;
		 max_sum =0;
		}
	}
Editor is loading...