zoukankan      html  css  js  c++  java
  • hdu 5823 color II 状压dp

    题目链接

    给n个点 n<=18。 然后给出它们两两之间是否有边相连。 问你这个图的所有子集,最少要用多少种颜色来染色, 如果两个点相连, 那么这两个点不能染同样的颜色。

    先预处理出所有的点独立集, 然后直接状压枚举所有的状态。 对每种状态枚举这个状态的所有子状态进行转移即可。

    #include <bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define mem(a) memset(a, 0, sizeof(a))
    const ll mod = (1LL<<32);
    const int inf = 1061109567;
    int vis[1<<19], dp[1<<19];
    char s[20][20];
    int main()
    {
        int t, n;
        cin>>t;
        while(t--) {
            cin>>n;
            mem(vis);
            for(int i = 0; i < n; i++)
                scanf("%s", s[i]);
            for(int i = 1; i < (1<<n); i++) {
                for(int j = 0; j < n; j++) {
                    if(i>>j&1) {
                        for(int k = 0; k < n; k++) {
                            if(i>>k&1 && s[j][k] == '1') {
                                vis[i] = 1;
                                break;
                            }
                        }
                    }
                    if(vis[i])
                        break;
                }
            }
            dp[0] = 0;
            for(int i = 1; i < (1<<n); i++) {
                dp[i] = inf;
                for(int j = i; j; j = (j-1)&i) {
                    if(!vis[j])
                        dp[i] = min(dp[i], dp[j^i]+1);
                }
            }
            ll ans = 0, tmp = 1;
            for(int i = 1; i < (1<<n); i++) {
                tmp = tmp*233%mod;
                ans = (ans + tmp*dp[i]%mod)%mod;
            }
            cout<<ans<<endl;
        }
        return 0;
    }
  • 相关阅读:
    Spring spEL
    Spring 使用外部部署文件
    Spring 自动装配
    spring 属性配置细节
    hdu 1054 Strategic Game
    fzu 2037 Maximum Value Problem
    将博客搬至CSDN
    HDU 4714 Tree2Cycle
    HDU 1009 The Shortest Path in Nya Graph
    POJ 1942 Paths on a Grid 组合数的优化
  • 原文地址:https://www.cnblogs.com/yohaha/p/5764486.html
Copyright © 2011-2022 走看看