Untitled

 avatar
unknown
plain_text
a year ago
1.4 kB
5
Indexable
#include<iostream>
using namespace std;
int t,k,r,m,n,ans;
int a,b,c;
int solita[100][3], loca[20][2], kc[20][100];
int vtsol[100];
bool vtloc[20];

int dis(int a){
	int b=0;
	for(int i=0; i<n; i++){
		if( vtsol[i]==-1 && kc[a][i] !=0){
			b+=kc[a][i];
			vtsol[i]=a;
		}
	}
	return b;
}

void bt(int dem, int current, int index){
	if(dem==k){
		if(current>ans)
			ans=current;
	}else if(index<m){
		if(vtloc[index]){
			vtloc[index]=false;
			int c=dis(index);
			current+=c;
			bt(dem+1,current,index+1);
			vtloc[index]=true;
			current-=c;
			for(int j=0; j<n; j++){
				if(vtsol[j]==index)
					vtsol[j]=-1;
			}
			bt(dem,current,index+1);
		}
	}
}

int main(){
	freopen("Text.txt", "r", stdin);
	cin >> t;
	for(int tc=1; tc<=t; tc++){
		cin >> k >> r;
		cin >> m;
		for(int i=0; i<m; i++){
			cin >> a >> b;
			loca[i][0]=a;
			loca[i][1]=b;
			vtloc[i]=true;
		}
		cin >> n;
		for(int i=0; i<n; i++){
			cin >> a >> b >> c;
			solita[i][0]=a;
			solita[i][1]=b;
			solita[i][2]=c;
			vtsol[i]=-1;
		}
		for(int i=0; i<m; i++){
			for(int j=0; j<n; j++){
				if(((loca[i][0]-solita[j][0])*(loca[i][0]-solita[j][0]) + (loca[i][1]-solita[j][1])*(loca[i][1]-solita[j][1])) <= r*r){
					kc[i][j]=solita[j][2];
				}else{
					kc[i][j]=0;
				}
			}
		}
		ans=0;
		bt(0,0,0);
		cout << "#" << tc << " " << ans << endl;
	}
	return 0;
}
Editor is loading...
Leave a Comment