Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <map>
- #include <set>
- #include <algorithm>
- using namespace std;
- int main() {
- int n,a,cc,m;
- cin >> n;
- set<int> wish;
- map <int,int> price;
- for (int i = 0; i < n; i++) {
- cin >> a >> cc;
- wish.insert(a);
- price[a] = cc;
- }
- cin >> m;
- int k[20], c[20];
- vector<set<int>>lunch(20);
- int kek;
- for (int i = 0; i < m; i++) {
- cin >> k[i] >> c[i];
- for (int j = 0; j < k[i]; j++) {
- cin >> kek;
- if (wish.find(kek)!=wish.end())
- lunch[i].insert(kek);
- }
- }
- int final=1<<m;
- long long minans=1e15, ans;
- for (int mask = 0; mask < final; mask++) {
- set<int>dishes;
- ans = 0;
- for (int pos = 0; pos < m; pos++) {
- if (mask & (1 << pos)) {
- ans += c[pos];
- for (int food : lunch[pos])
- dishes.insert(food);
- }
- }
- for (int elem : wish)
- if (dishes.find(elem)==dishes.end())
- ans+=price[elem];
- if (ans < minans)
- minans = ans;
- }
- cout << minans;
- }
Add Comment
Please, Sign In to add comment