首页 > 其他 > 详细

洛谷 P1879 [USACO06NOV]玉米田Corn Fields

时间:2018-09-03 20:13:10      阅读:201      评论:0      收藏:0      [点我收藏+]

题意

给定一个n * m的01表格,0表示不能种草,1表示可以种,
而且每块草都不相邻,求共有多少种草的方案。

题解

状压DP

代码

#include <cstdio>
#include <algorithm>
#define REG(a, x, y) for (register int a = x; a <= y; ++a)
using namespace std;
const int Mod = 1e9;
int n, m, x, N, ans;
int map[15], dp[15][5000];
int main()
{
    scanf("%d%d", &m, &n);
    REG(i, 1, m)
        REG(j, 1, n)
        {
            scanf("%d", &x);
            (map[i] <<= 1) |= x;
        }
    N = (1 << n) - 1;
    REG(i, 0, N)
        if (!(i & (i << 1)) && !(i & (i >> 1)) && (i & map[1]) == i)
            dp[1][i] = 1;
    REG(i, 2, m)
        REG(j, 0, N)
            if (!(j & (j << 1)) && !(j & (j >> 1)) && (j & map[i]) == j)
                REG(k, 0, N)
                    if (!(j & k))
                        (dp[i][j] += dp[i - 1][k]) %= Mod;
    REG(i, 0, N) (ans += dp[m][i]) %= Mod;
    printf("%d\n", ans);
}

洛谷 P1879 [USACO06NOV]玉米田Corn Fields

原文:https://www.cnblogs.com/xuyixuan/p/9580580.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!