1 条题解

  • 1
    @ 2022-8-8 11:00:58

    状压dp 数据很水不知道暴力能不能过 每一行状态中有牛为1没牛为0 板子里面加一行关于草地的判断即可 超级水的好不好啦

    CODE

    #include<bits/stdc++.h>
    using namespace std;
    const int mod = 10086;
    int n, m;
    int a[13][13];
    int F[13];
    int f[13][1 << 12 + 5];		
    bool g[1 << 12 + 5];
    int main() {
    	scanf("%d %d", &m, &n); 
    	for (int i = 1; i <= m; i++)
    		for (int j = 1; j <= n; j++) {
    			scanf("%d", &a[i][j]);
                F[i] = (F[i] << 1) + a[i][j];
    		}
    	for (int i = 0; i < (1 << n); i++) 
        	g[i] = (!(i & (i << 1))) && (!(i & (i >> 1)));
    	f[0][0] = 1;
    	for (int i = 1; i <= m; i++) 
    		for (int j = 0; j < (1 << n); j++) 
    			if (g[j] && ((j & F[i]) == j))
    				for (int k = 0; k < (1 << n); k++) 
    					if ((k & j) == 0)
    						f[i][j] = (f[i][j] + f[i - 1][k]) % mod;
    	int ans = 0;
    	for (int i = 0; i < (1 << n); i++) 
    		ans = (ans + f[m][i]) % mod;
    	printf("%d\n", ans);
    	return 0;
    }
    
    • 1

    信息

    ID
    3
    时间
    1000ms
    内存
    256MiB
    难度
    4
    标签
    递交数
    3
    已通过
    1
    上传者