1 条题解

  • 0
    @ 2025-5-18 7:15:17

    #include #include #include #include #include #include

    using namespace std;

    int n; vector brightness; vector octagons; vector<vector> rotated; int min_sum = INT_MAX;

    void backtrack(int pos, char req_color, int current_sum, const vector& perm, const vector& used) { if (pos == n) { if (req_color == rotated[perm[0]][0][6]) { if (current_sum < min_sum) { min_sum = current_sum; } } return; } int oct_idx = perm[pos]; for (const string& rot : rotated[oct_idx]) { if (rot[6] == req_color) { char new_req_color = rot[2]; int new_sum = current_sum + brightness[rot[2] - 'A']; if (new_sum < min_sum) { backtrack(pos + 1, new_req_color, new_sum, perm, used); } } } }

    void solve() { while (true) { cin >> n; if (n == 0) break; brightness.resize(8); for (int i = 0; i < 8; ++i) { cin >> brightness[i]; } octagons.resize(n); for (int i = 0; i < n; ++i) { cin >> octagons[i]; }

        rotated.clear();
        rotated.resize(n);
        for (int i = 0; i < n; ++i) {
            string oct = octagons[i];
            for (int j = 0; j < 8; ++j) {
                rotated[i].push_back(oct.substr(j) + oct.substr(0, j));
            }
        }
        
        min_sum = INT_MAX;
        vector<int> perm(n);
        for (int i = 0; i < n; ++i) {
            perm[i] = i;
        }
        
        do {
            string first_oct = rotated[perm[0]][0];
            char required_color = first_oct[2];
            int current_sum = brightness[first_oct[6] - 'A'];
            vector<bool> used(n, false);
            used[perm[0]] = true;
            backtrack(1, required_color, current_sum, perm, used);
        } while (next_permutation(perm.begin(), perm.end()));
        
        if (min_sum != INT_MAX) {
            cout << min_sum << endl;
        } else {
            cout << "impossible" << endl;
        }
    }
    

    }

    int main() { solve(); return 0; }

    • 1

    信息

    ID
    550
    时间
    3000ms
    内存
    64MiB
    难度
    10
    标签
    递交数
    13
    已通过
    0
    上传者