zoukankan      html  css  js  c++  java
  • poj2441 Arrange the Bulls

    思路:

    状态压缩dp。需要一点优化,否则容易超时。

    实现:

     1 #include <cstdio>
     2 #include <vector>
     3 #include <cstring>
     4 #include <iostream>
     5 using namespace std;
     6 vector<int> G[21];
     7 int n, m, dp[1 << 21];
     8 int main()
     9 {
    10     int p, x;
    11     scanf("%d%d", &n, &m);
    12     for (int i = 1; i <= n; i++)
    13     {
    14         scanf("%d", &p);
    15         for (int j = 0; j < p; j++)
    16         {
    17             scanf("%d", &x);
    18             G[i].push_back(x);
    19         }
    20     }
    21     dp[0] = 1;
    22     for (int i = 0; i < n; i++)
    23     {
    24         for (int j = (1 << m + 1) - 1; j >= 0; j--)
    25         {
    26             if (__builtin_popcount(j) != i) continue;
    27             for (int k = 0; k < G[i + 1].size(); k++)
    28             {
    29                 int tmp = G[i + 1][k];
    30                 if (!(j >> tmp & 1)) dp[j | 1 << tmp] += dp[j];
    31             }
    32         }
    33     }
    34     int cnt = 0;
    35     for (int j = 0; j < (1 << m + 1) - 1; j++) 
    36         if (__builtin_popcount(j) == n) cnt += dp[j];
    37     printf("%d
    ", cnt);
    38     return 0;
    39 }
  • 相关阅读:
    (转)静态方法与实例方法
    使用C#和Excel进行报表开发(8)
    js千分位
    各种语言多态性比较
    中国互联网100个Web2.0网站名单
    HDU4405 期望
    HDU1266 字符串逆转
    POJ1087 DInic
    POJ1003 水~
    HDU4403 DFS
  • 原文地址:https://www.cnblogs.com/wangyiming/p/9141724.html
Copyright © 2011-2022 走看看