• poj3254 Corn Fields


    思路:

    状态压缩dp。

    实现:

     1 #include <iostream>
     2 using namespace std;
     3 const int MOD = 100000000;
     4 int m, n, a[13][13], dp[13][13][1 << 13];
     5 int main()
     6 {
     7     cin >> m >> n;
     8     for (int i = 0; i < m; i++)
     9     {
    10         for (int j = 0; j < n; j++)
    11         {
    12             cin >> a[i][j];
    13         }
    14     }
    15     for (int i = 0; i < 1 << n; i++)
    16     {
    17         bool flg = true;
    18         for (int j = 0; j < n; j++)
    19         {
    20             if (a[m - 1][j] == 0 && i >> j & 1) 
    21             {
    22                 flg = false;
    23                 break;
    24             }
    25         }
    26         dp[m][0][i] = flg;
    27     }
    28     for (int i = m - 1; i >= 0; i--)
    29     {
    30         for (int j = n - 1; j >= 0; j--)
    31         {
    32             for (int k = 0; k < 1 << n; k++)
    33             {
    34                 int ni = i, nj = j + 1;
    35                 if (j == n - 1) { ni = i + 1; nj = 0; }
    36                 dp[i][j][k] += dp[ni][nj][k & ~(1 << j)];
    37                 dp[i][j][k] %= MOD;
    38                 bool ok = true;
    39                 if (a[i][j] == 0) ok = false;
    40                 if (j && k >> (j - 1) & 1) ok = false;
    41                 if (k >> j & 1) ok = false;
    42                 if (ok) 
    43                 {
    44                     dp[i][j][k] += dp[ni][nj][k | 1 << j];
    45                     dp[i][j][k] %= MOD;
    46                 }
    47             }
    48         }
    49     }
    50     cout << dp[0][0][0] << endl;
    51     return 0;
    52 }
  • 相关阅读:
    最大流问题的几种经典解法综述
    有上下界的网络流
    hiho一下
    poj 1018
    状压dp
    hdu 1043
    Poj1015
    7.14
    sgu 128
    (zhuan)
  • 原文地址:https://www.cnblogs.com/wangyiming/p/9142080.html
Copyright © 2020-2023  润新知