AC Challenge - 计蒜客

Posted zgglj-com

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AC Challenge - 计蒜客相关的知识,希望对你有一定的参考价值。

技术分享图片

ps:有写状压的感觉,但还是有些地方没想明白。一定要处理掉那些不合法的状态转移

const int N = 2000000;

int n;
int a[30], b[30];
vector<int> s[30];

LL dp[N];

inline void upd(LL &x, LL y) { (x < y) && (x = y); }

int main()
{
    sc(n);
    Rep(i, 1, n) {
        sc(a[i]), sc(b[i]);
        int t, u;
        sc(t);
        Rep(j, 1, t) sc(u), s[i].pb(u);
    }

    Rep(i, 0, (1 << n) - 1) {
        if (!dp[i] && i) continue;  // 因为当前的集合一定是在先前某个集合转移过来的
        rep(j, 0, n) if (!((1 << j) & i)) {
            bool flag = false;
            for (auto v : s[j + 1]) if (!((1 << (v - 1)) & i)) {
                flag = true;
                break;
            }
            if (!flag) {
                upd(dp[i | (1 << j)], dp[i] + 1ll * (__builtin_popcount(i) + 1) * a[j + 1] + b[j + 1]);
            }
        }
    }

    pr(dp[(1 << n) - 1]);
    return 0;
}

 

以上是关于AC Challenge - 计蒜客的主要内容,如果未能解决你的问题,请参考以下文章

计蒜客 30994 - AC Challenge - [状压DP][2018ICPC南京网络预赛E题]

计蒜客--八皇后问题

计蒜客练习题:素数距离

计蒜客--网页跳转问题

计蒜客--蒜头君开公司

K - Triangle 计蒜客 - 42405