Untitled
unknown
plain_text
2 years ago
1.6 kB
9
Indexable
//thanh tri
#include <iostream>
using namespace std;
int soLK;
int giaLK[25];
int soUD;
int arr[35][25];
int giaUD[35];
int soLKUD[35];
int soCanMua;
int canMua[25];
int visit[25];
int minCost;
void Try(int index, int cost)
{
if (cost > minCost) return;
if(index > soUD)
{
for (int k = 1; k <= soCanMua; k++)
{
if(visit[canMua[k]] == 0) cost += giaLK[canMua[k]];
}
if (cost < minCost) minCost = cost;
return;
}
for (int k = 1; k <= soLKUD[index]; k++)
{
visit[arr[index][k]]++;
}
Try(index +1, cost + giaUD[index]);
for (int k = 1; k <= soLKUD[index]; k++)
{
visit[arr[index][k]]--;
}
Try(index +1, cost);
}
int main()
{
// freopen("03_input.txt", "r", stdin);
int T;
cin >> T;
for (int tC = 1; tC <= T; tC++)
{
cin >> soLK;
for (int i = 1; i <= soLK; i++)
{
cin >> giaLK[i];
}
cin >> soUD;
//
for (int j = 1; j <= soLK; j++)
{
visit[j] = 0;
}
//
for (int i = 1; i <= soUD; i++)
{
cin >> giaUD[i] >> soLKUD[i];
for (int j = 1; j <= soLKUD[i]; j++)
{
cin >> arr[i][j];
}
}
cin >> soCanMua;
for (int i = 1; i <= soCanMua; i++)
{
cin >> canMua[i];
}
minCost = 999999999;
Try(1,0);
cout << "#" << tC << " " << minCost << endl;
}
return 0;
}
Editor is loading...