Untitled

 avatar
unknown
plain_text
2 years ago
1.6 kB
5
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...