JZOJ 1266. 玉米田

traveller-ly 2018-07-19 原文

JZOJ 1266. 玉米田

Description

  农民 John 购买了一处肥沃的矩形牧场,分成M*N(1 <= M <= 12; 1 <= N <= 12)个格子。他想在那里的一些格子中种植美味的玉米。遗憾的是,有些格子区域的土地是贫瘠的,不能耕种。精明的 FJ 知道奶牛们进食时不喜欢和别的牛相邻,所以一旦在一个格子中种植玉米,那么他就不会在相邻的格子中种植,即没有两个被选中的格子拥有公共边。他还没有最终确定哪些格子要选择种植玉米。           作为一个思想开明的人,农民 John 希望考虑所有可行的选择格子种植方案。由于太开明,他还考虑一个格子都不选择的种植方案!请帮助农民 John 确定种植方案总数。
 

Input

  Line 1: 两个用空格分隔的整数 M 和 N
  Lines 2..M+1: 第 i+1 行描述牧场第i行每个格子的情况, N 个用空格分隔的整数,表示 这个格子是否可以种植(1 表示肥沃的、适合种植,0 表示贫瘠的、不可种植)

Output

  Line 1: 一个整数: FJ 可选择的方案总数 除以 100,000,000 的余数。
 

Sample Input

2 3
1 1 1
0 1 0

Sample Output

9
 
做法:直接将状态压缩,然后dp统计就好了,转移方程与预处理看代码

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <string>
 5 #define LL long long
 6 #define mo 100000000
 7 using namespace std;
 8 long long f[13][4100], e[13][4100], ans;
 9 int n, m, a[13][13];
10 int pre[20];
11 
12 void dfs(int h, int dep, int s, int choose)
13 {
14     if (dep > m)
15     {
16         e[h][++e[h][0]]    = s;
17         return;
18     }
19     if (a[h][dep] && !choose)    dfs(h, dep + 1, s + pre[dep - 1], 1);
20     dfs(h, dep + 1, s, 0);
21 }
22 
23 void pre_work()
24 {
25     pre[0] = 1;
26     for (int i = 1; i <= 18; i++)
27         pre[i] = pre[i - 1] * 2;
28     for (int i = 1; i <= n; i++)
29         dfs(i, 1, 0, 0);
30 }
31 
32 void dp()
33 {
34     for (int i = 1; i <= e[1][0]; i++)
35         f[1][e[1][i]] = 1;
36     for (int i = 2; i <= n; i++)
37     {
38         for (int j = 1; j <= e[i][0]; j++)
39             for (int k = 1; k <= e[i - 1][0]; k++)
40                 if ((e[i][j] & e[i - 1][k]) == 0)    
41                     f[i][e[i][j]] += f[i - 1][e[i - 1][k]];
42     }
43     ans = 0;
44     for (int i = 1; i <= e[n][0]; i++)
45         ans += f[n][e[n][i]], ans %= mo;    
46 }
47 
48 int main()
49 {
50     freopen("cowfood.in", "r", stdin);
51     freopen("cowfood.out", "w", stdout);
52     scanf("%d%d", &n, &m);
53     for (int i = 1; i <= n; i++)
54     {
55         for (int j = 1; j <= m; j++)
56             scanf("%d", &a[i][j]);
57     }
58     pre_work();
59     dp();
60     printf("%lld", ans);
61 }

View Code

 

 
代码如下:
发表于 2018-07-19 21:23 执迷于沿途风景的旅人 阅读() 评论() 编辑 收藏

 

版权声明:本文为traveller-ly原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/traveller-ly/p/9338501.html

JZOJ 1266. 玉米田的更多相关文章

  1. JZOJ 2136. 【GDKOI2004】汉诺塔

    JZOJ 2136. 【GDKOI2004】汉诺塔 2136. 【GDKOI2004】汉诺塔 (Standar […]...

  2. JZOJ 3462. 【NOIP2013模拟联考5】休息(rest)

    JZOJ 3462. 【NOIP2013模拟联考5】休息(rest) 3462. 【NOIP2013模拟联考5 […]...

  3. JZOJ 3382. 【NOIP2013模拟】七夕祭 (Standard IO)

    JZOJ 3382. 【NOIP2013模拟】七夕祭 (Standard IO) 3382. 【NOIP201 […]...

  4. JZOJ 4269. 【NOIP2015模拟10.27】挑竹签

    JZOJ 4269. 【NOIP2015模拟10.27】挑竹签 4269. 【NOIP2015模拟10.27】 […]...

  5. JZOJ 3385. 【NOIP2013模拟】黑魔法师之门

    JZOJ 3385. 【NOIP2013模拟】黑魔法师之门 3385. 【NOIP2013模拟】黑魔法师之门  […]...

  6. JZOJ 1264. 乱头发节

    JZOJ 1264. 乱头发节 1264. 乱头发节(badhair.pas/c/cpp) (File IO) […]...

  7. JZOJ 3509. 【NOIP2013模拟11.5B组】倒霉的小C

    JZOJ 3509. 【NOIP2013模拟11.5B组】倒霉的小C 3509. 【NOIP2013模拟11. […]...

  8. JZOJ 3223. 【HBOI2013】Ede的新背包问题

    JZOJ 3223. 【HBOI2013】Ede的新背包问题 3223. 【HBOI2013】Ede的新背包问 […]...

随机推荐

  1. Windows系统配置FRP内网穿透映射

    404...

  2. Github自动打包并推送Nuget版本

    如何将自己的类库,自动打包并自动发布到Nuget? 1. 项目csproject属性修改 新建一个项目GitT […]...

  3. 打造你的第一个 Electron 应用

    Electron 可以让你使用纯 JavaScript 调用丰富的原生(操作系统) APIs 来创造桌面应用。 […]...

  4. 模板类声明(.h)与定义(.cpp)分开存储

    模板类声明(.h)与定义(.cpp)分开存储 在使用模板类构造的时候有时会出现无法解析的外部符号!! 当编译器 […]...

  5. 文件或目录损坏且无法读取的解决办法

    方法很简单,用chsdsk命令即可 详解如下: 开始–运行–输入cmd–输 […]...

  6. 力扣240——搜索二维矩阵

    这道题主要是利用搜索二维矩阵本身的特性,找到其中的规律,就可以解决了。 原题 编写一个高效的算法来搜索 m x […]...

  7. 一个网站的详细测试方法要求和步骤

    一个网站的详细测试方法要求和步骤 一个网站的详细测试方法要求和步骤   一个网站基本完工后,需要通过下面几个步 […]...

  8. 3DMax 物体选择方法

    全选: Ctrl + A, 取消选择:Ctrl +D 加选:ctrl+鼠标左键;减选:alt+鼠标 窗口与交叉 […]...

展开目录

目录导航