제출 #1307126

#제출 시각아이디문제언어결과실행 시간메모리
13071261anLongest beautiful sequence (IZhO17_subsequence)C++20
23 / 100
190 ms327680 KiB
#include <bits/stdc++.h>

using namespace std;

int main () {
    int n;
    cin >> n;

    vector<int> a(n), k(n);
    for (int i = 0; i < n; i++)
        cin >> a[i];

    for (int i = 0; i < n; i++)
        cin >> k[i];

    vector<int> dp(n, 1), prev(n);
    vector<vector<int>> bc(n, vector<int>(n));

    for (int i = 0; i < n; i++)
        prev[i] = i;

    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            bc[i][j] = __builtin_popcount(a[i] & a[j]);

    for (int i = 1; i < n; i++) {
        for (int j = i - 1; j >= 0; j--) {
            if (1 + dp[j] > dp[i] && bc[i][j] == k[i]) {
                dp[i] = 1 + dp[j];
                prev[i] = j;
            }
        }
    }

    auto largest = max_element(dp.begin(), dp.end());
    int idx = distance(dp.begin(), largest);

    stack<int> st;

    printf("%d\n", *largest);
    while (true) {
        st.push(idx);

        if (prev[idx] == idx)
            break;

        idx = prev[idx];
    }

    while (!st.empty()) {
        printf("%d ", st.top() + 1);
        st.pop();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...