• 1042B. Vitamins


    Berland shop sells nn kinds of juices. Each juice has its price cici. Each juice includes some set of vitamins in it. There are three types of vitamins: vitamin "A", vitamin "B" and vitamin "C". Each juice can contain one, two or all three types of vitamins in it.

    Petya knows that he needs all three types of vitamins to stay healthy. What is the minimum total price of juices that Petya has to buy to obtain all three vitamins? Petya obtains some vitamin if he buys at least one juice containing it and drinks it.

    Input

    The first line contains a single integer n(1n1000)(1≤n≤1000) — the number of juices.

    Each of the next nn lines contains an integer cici (1ci100000)(1≤ci≤100000) and a string sisi — the price of the ii-th juice and the vitamins it contains. String sisi contains from 11 to 33 characters, and the only possible characters are "A", "B" and "C". It is guaranteed that each letter appears no more than once in each string sisi. The order of letters in strings sisi is arbitrary.

    Output

    Print -1 if there is no way to obtain all three vitamins. Otherwise print the minimum total price of juices that Petya has to buy to obtain all three vitamins.

    Examples
    input
    Copy
    4
    5 C
    6 B
    16 BAC
    4 A
    output
    Copy
    15
    input
    Copy
    2
    10 AB
    15 BA
    output
    Copy
    -1
    input
    Copy
    5
    10 A
    9 BC
    11 CA
    4 A
    5 B
    output
    Copy
    13
    input
    Copy
    6
    100 A
    355 BCA
    150 BC
    160 AC
    180 B
    190 CA
    output
    Copy
    250
    input
    Copy
    2
    5 BA
    11 CB
    output
    Copy
    16
    Note

    In the first example Petya buys the first, the second and the fourth juice. He spends 5+6+4=155+6+4=15 and obtains all three vitamins. He can also buy just the third juice and obtain three vitamins, but its cost is 1616, which isn't optimal.

    In the second example Petya can't obtain all three vitamins, as no juice contains vitamin "C".


    只有ABC三位,如果按位或是不错的选择

    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <string>
    #include <set>
    #include <queue>
    #include <map>
    #include <sstream>
    #include <cstdio>
    #include <cstring>
    #include <numeric>
    #include <cmath>
    #include<unordered_set>
    #define ll long long
    using namespace std;
    int dir[4][2] = { {1,0},{-1,0},{0,1},{0,-1} };
    
    int main()
    {
        map<string,int> mp;
        int n;
        cin >> n;
        vector<int> dp(8,1e9);
        dp[0] = 0;
        while (n--)
        {
            int cost;
            string vit;
            cin >> cost >> vit;
            int m = 0;
            for (int i = 0; i < vit.size(); i++)
                m |= 1 << (vit[i] - 'A');
            for (int i = 0; i < 8; i++)
            {
                dp[i | m] = min(dp[i | m], dp[i] + cost);
            }
        }
        if (dp[7] == 1e9)
            dp[7] = -1;
        cout << dp[7];
        //system("pause");
        return 0;
    }
  • 相关阅读:
    最小花费
    LOJ10090
    LOJ2436
    loj10087
    LOJ2632
    LOJ10021 Addition Chains
    LOJ10019生日蛋糕
    loj10018数的划分
    LOJ10015扩散
    loj10014数列分段二
  • 原文地址:https://www.cnblogs.com/dealer/p/12299641.html
Copyright © 2020-2023  润新知