Untitled

 avatar
unknown
plain_text
2 years ago
1.7 kB
7
Indexable
#include<iostream>

using namespace std;

int Component[25] = {0};
int L; // so linh kien can mua

int Sunny[25] ={0};
int N; // so linh kien cho troi

int QuantityCombo[35][25] = {0};
int PriceCombo[35] = {0};
int nComponentCombo[25];
int M; // so goi combo

int VCB[20] = {0}; // danh sach counting sort lk da mua

int minPrime = 10000000;
int price;

void buy(int k)
{
	price += PriceCombo[k];
	for(int i =0; i < nComponentCombo[k]; i++)
	{
		VCB[QuantityCombo[k][i]]++;
	}
}

void unBuy(int k)
{
	price -= PriceCombo[k];
	for(int i =0; i < nComponentCombo[k]; i++)
	{
		VCB[QuantityCombo[k][i]]--;
	}
}

void backTrack(int k)
{
	if(price > minPrime)
	{
		return;
	}
	if(k == M)
	{
		// tinh price
		for(int i =0; i < L; i++)
		{
			if(VCB[Component[i]] == 0)
			{
				price += Sunny[Component[i]];
			}
		}
		return;
	}
	// lua chon cua cac candidate
	for(int i = 0; i< 2; i++)
	{
		if(i == 0)
		{
			backTrack(k + 1);
		}
		if(i == 1)
		{
			buy(k);
			backTrack(k + 1);
			unBuy(k);
		}
	}

}

int main()
{
	freopen("Text.txt","r",stdin);

	int T;
	cin>>T;

	for(int tc =1; tc < T; tc++)
	{
		cin >> N;
		for(int i =0; i< N; i++) // cin gia linh kien cho troi
		{
			cin>>Sunny[i];
		}
		cin>>M; // cin so luong combo
		for(int i =0; i< M; i++)
		{
			cin>>PriceCombo[i];
			cin>> nComponentCombo[i];
			for(int j = 0; j < nComponentCombo[i]; j++)
			{
				cin>>QuantityCombo[i][j];
			}
		}
		cin>>L;// so linh kien can mua
		for(int i = 0; i < L; i++)
		{
			cin>>Component[i];
		}
		// process
		backTrack(0);
		//cout ans
	cout <<"#"<<tc<<" "<<price<<endl;

	}
	return 0;
}
Editor is loading...