Untitled
unknown
plain_text
2 years ago
1.7 kB
3
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...