poj 3254 Corn Fields

POJ 3254 Corn Fields(状态压缩)代码详解 Corn Fields(POJ 3254) Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 18002 Accepted: 9478 Description Farmer John has purchased a lush new rectangular pasture composed of M... 阅读详情

题目:

Description

Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ≤ 12) square parcels. He wants to grow some yummy corn for the cows on a number of squares. Regrettably, some of the squares are infertile and can’t be planted. Canny FJ knows that the cows dislike eating close to each other, so when choosing which squares to plant, he avoids choosing squares that are adjacent; no two chosen squares share an edge. He has not yet made the final choice as to which squares to plant.

Being a very open-minded man, Farmer John wants to consider all possible options for how to choose the squares for planting. He is so open-minded that he considers choosing no squares as a valid option! Please help Farmer John determine the number of ways he can choose the squares to plant.

Input

Line 1: Two space-separated integers: M and N
Lines 2.. M+1: Line i+1 describes row i of the pasture with N space-separated integers indicating whether a square is fertile (1 for fertile, 0 for infertile)

Output

Line 1: One integer: the number of ways that FJ can choose the squares modulo 100,000,000.

Sample Input

2 3
1 1 1
0 1 0

Sample Output

9

Hint

Number the squares as follows:
1 2 3
4

There are four ways to plant only on one squares (1, 2, 3, or 4), three ways to plant on two squares (13, 14, or 34), 1 way to plant on three squares (134), and one way to plant on no squares. 4+3+1+1=9.

思路:

题目大意: 农夫有一块地,被划分为m行n列大小相等的格子,其中一些格子是可以放牧的(用1标记),农夫可以在这些格子里放牛,其他格子则不能放牛(用0标记),并且要求不可以使相邻格子都有牛。现在输入数据给出这块地的大小及可否放牧的情况,求该农夫有多少种放牧方案可以选择(注意:任何格子都不放也是一种选择,不要忘记考虑! )

状态压缩dp。
用二进制数据表示每个放格放不放牛,并且放牛格子不相邻,然后转化成十进制记录不同的状态。state[1<<N]
dp[i][j]表示第i行状态为j时的放牧方案个数。
对于状态j要判断是否可以存在。
当第i行有状态j存在,再找第i-1行是否有状态k存在,如果存在,再判断第i行的状态j和第i-1行的状态k是否存在放牛格子相邻,相邻就舍弃。
最后把第n-1行所有的状态的方案加起来即为所求。

代码:

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
int state[1<<12];//所有的可能放法状态
int map[13];//map[i]表示每行土地的当前状态取反之后的结果
int dp[13][1<<12];//dp[i][j]表示第i行状态为j时放法
int tol,n,m;
const int mod = 100000000;
void findAllState(){
    tol = 0;
    for (int i = 0; i < (1 << n); i++){
        if ((i&(i << 1))==0){ //如果状态i满足相邻两位数不同时为1,表示此状态可行
            state[tol++] = i;
        }
    }
}//找出所有的可能放法状态
bool judge(int st,int m){
    return state[st] & map[m]; //如果返回false则满足
}//判断可能状态state是否满足土地当前状态
int main()
{
    while (scanf("%d%d", &m, &n)!=EOF){
        memset(dp,0,sizeof(dp));
        memset(map,0,sizeof(map));
        memset(state,0,sizeof(state));
        int x;
        for (int i = 0; i < m; i++){
            for (int j = 0; j < n; j++){
                scanf("%d",&x);
                if (x == 0){
                    map[i] +=(1<<j);
                }
            }
        }//对土地状态进行取反
        findAllState();
        for (int i = 0; i < tol; i++){
            if (!judge(i, 0)){
                dp[0][i] = 1;
            }
        }//对第0行初始化
        for (int i = 1; i < m; i++){
            for (int j = 0; j < tol; j++){
                if (judge(j, i)){
                    continue;//状态j不满足第i行土地状态
                }
                for (int k = 0; k < tol; k++){
                    if (judge(k, i - 1)){
                        continue;//状态j不满足第i-1行土地状态
                    }
                    if (!(state[j] & state[k])){
                        dp[i][j] += dp[i - 1][k];
                    }//判读竖直方向上是否有相邻两位数同时为1
                }
            }
        }
        int ans = 0;
        for (int i = 0; i < tol; i++){
            ans += dp[m - 1][i];
            ans %= mod;
        }
        printf("%d\n",ans);
    }
    return 0;
}
Python 爬虫实战:爬取电商平台商品信息(价格 / 销量 / 评价) 摘要:本文详细介绍基于Python的电商商品信息爬取技术方案,以京东商品详情页为例,对比分析静态(BeautifulSoup)和动态(Selenium)两种爬取方式的实现逻辑。静态爬取适合获取基础信息,而动态爬取可解决JS渲染数据的获取问题。文章包含完整的代码实现、反爬规避策略及数据存储方案,涵盖商品名称、价格、销量、评价等核心数据提取。同时强调爬虫的合规使用,提供扩展方向建议,为电商数据采集提供实用技术参考。 阅读详情

相关推荐

DBeaver 实战:手动配置 PostgreSQL JDBC 驱动的高级技巧

本文详细介绍了在DBeaver中手动配置PostgreSQL JDBC驱动的高级技巧。针对企业内网、多版本数据库兼容等场景,从获取官方驱动文件、创建自定义驱动配置,到使用Maven坐标管理、连接参数调优及解决常见连接问题,提供了完整的实战指南,帮助开发者实现对数据库连接环境的精准掌控。

apple5的专栏 836

【题解】poj 3254 Corn Fields

题目描述 农场主John新买了一块长方形的新牧场,这块牧场被划分成M行N列(1 ≤ M ≤ 12; 1 ≤ N ≤ 12),每一格都是一块正方形的土地。John打算在牧场上的某几格里种上美味的玉米,供他的奶牛们享用。遗憾的是,有些土地相当贫瘠,不能用来种玉米。并且,奶牛们喜欢独占一块地的感觉,于是John不会选择两块相邻的土地,也就是说,没有哪两块玉米地有公共边。John想知道,如...

C@bMv7GRVt)Q 478

S-function入门及案例详解(1)——S-function基础介绍及基本案例

本专题将用三篇文章对S-function进行介绍及其案例详解。欢迎关注~ 目录一、S-Function简介二、详解sfuntmpl函数2.1 sfuntmpl函数介绍2.2 mdlInitializeSizes函数2.3 mdlDerivatives函数2.4 mdlUpdate函数2.5 mdlOutputs函数2.6 mdlGetTimeOfNextVarHit函数2.7 mdlTerminate函数三、案例1——对波形的幅值进行放大3.1 案例分析3.2 案例详解3.3 输出波形四、案例2——对波形的

Wendy的博客 7万+

poj 3254 Corn Fields 状压dp

Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 19399   Accepted: 10189 Description Farmer John has purchased a lush new rectangular pasture composed of M by...

liluoyu_1016的博客 226

使用 AFL++ 对 IoT 二进制文件进行模糊测试 - 第一部分

American fuzzy lop 是一款面向安全的模糊测试器,它采用一种新型的编译时插桩和遗传算法,可以自动发现干净、有趣的测试用例,从而触发目标二进制文件中新的内部状态。这显著提高了模糊测试代码的功能覆盖率。AFL 的地址是它已经有一段时间没有更新了。虽然 AFL 仍然运行良好,但有一个新项目 AFL++,它是 AFL 的一个分支,包含许多改进和新功能。AFL++ 的地址是,其源代码位于。在本文中,我们将研究如何使用 AFL++ 对 IoT 二进制文件进行模糊测试。

技术超强的网络安全平台 1086

Clion编译stm32cube初始化工程时non constant or forward reference address expression for section .ARM.extab报错

相信应该有同学在看了稚晖君关于clion开发stm32的文章之后也想在自己PC上实现“优雅の嵌入式开发”遇到和我类似的问题。他的文章是22年写的,我个人猜测应当是版本更新导致的不适配。意思就是说 READONLY 只能在gcc11以后的版本中使用,gcc10及以前的版本将无法正确识别,也就有如下错误。或者就可以将gcc升级至最新的版本。记得在clion工具链中修改c,cpp编译器的位置。可以将文本括号中的 READONLY 全部删除。当时由于没有注意到这行注释导致在这里卡了好久。

2301_77256849的博客 2511

POJ 3254 Corn Fields 状态压缩(dp)

链接:http://poj.org/problem?id=3254Corn FieldsTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 18865 Accepted: 9912DescriptionFarmer John has purchased a lush new rectangular pasture composed o...

SYP___ 280

Claude Code 完整使用教程(2026最新版)

《Claude Code 完整使用教程(2026最新版)》摘要: Claude Code 是 Anthropic 公司推出的智能编程工具,通过自然语言对话实现代码编写、调试和重构。本教程基于 v2.1.101 版本,涵盖安装配置、核心功能及最新特性。主要内容包括: 多平台安装方式(macOS/Linux/Windows) 桌面应用专属功能如并行会话、定时任务和语音模式 模型选择指南(Sonnet/Opus/Haiku) 快速入门示例:5分钟创建Node.js项目 核心功能:代码读写、命令执行、Git集成等

程序猿_三产 2万+

POJ3254 Corn Fields

原题链接http://poj.org/problem?id=3254 POJ 3254 corn fields 状态压缩动态规划

昨天的我现在的未来 341

华为OD机试真题 新系统2026-04-15 Python&JS 实现【失灵的键盘】

有一个键盘有2个按键失灵了,按下这些键时会连续输出其他键对应的字符两次。具体如下: 1. 按下j键一次,屏幕上显示uu(两个连续的u);  按下b键一次,屏幕上显示t(两个连续的t) 2. u键和t键是好的,按下u键一次时,屏幕只会显示一次u(正常按键);按下t键一次时,屏幕只会显示一次t(正常按键) 3. 假定屏幕上连续显示两个t一定是按了一次b键,而不是两次t键;假定按键t之后不会紧接着按键b,即tttt转义为两个b,而不可能是tb

MISAYAONE的博客 523

数据分析案例-对某宝用户评论做情感分析

目录 原始数据 绘制词云图 情感分析 原始数据 原始数据为某宝一商品的用户评论数据 绘制词云图 # coding=utf-8 import jieba import re import wordcloud import imageio # 打开需要分析词频的文本 with open('淘宝评论3.0.txt', encoding='utf-8') as f: data = f.read() # 文本预处理 :去除一些无用的字符只提取出中文出来 new_data

m0_64336780的博客 1万+

POJ 3254 Corn Fields

<br />记录状态的DP.<br />每一行的状态有2^12种可能(其中一部分状态是无效的),且与前一行的状态相关,<br />题目要求计算的可以理解为到达最后一行各个有效状态的次数之和。<br />输入1 for fertile, 0 for infertile,为了计算方便进行取反,0 for fertile, 1 for infertile。<br /><br /><br />/*Corn Fields Time Limit: 2000MS Memory Limit: 65536K Tota

mimo9527的专栏 847

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

POJ-3254 Corn Fields

题目链接: \quad POJ-3254 题目大意: \quad 给一个 N×MN×MN \times M 块土地,111 表示这块土地肥沃,000 表示土地贫瘠;现在只能在肥沃的土地上种玉米,问有多少种种法使得玉米两两不相邻 (相邻指的是上下走右四个方向) ? \quad Tips : 也可以一颗都不种。还要取模。 数据范围: \quad 1≤N,M≤121≤N,M≤121 \l...

XzzF1024的博客 426

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Corn Fields POJ - 3254

Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M≤ 12; 1 ≤ N ≤ 12) square parcels. He wants to grow some yummy corn for the cows on a number of squares. Regrettably, s...

weixin_41544329的博客 160

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

poj3254 Corn Fields

poj3254分析这道题算是状态压缩dp的入门题吧,知道状态压缩是个什么套路。题目http://poj.org/problem?id=3254代码#include <cstdio> #include <cstring> #include <algorithm> #include <cmath>using namespace std;const int mod=100000000; int n,m,t

天道酬勤 228

【poj3254】Corn Fields 状态压缩dp

AC通道:http://vjudge.net/problem/POJ-3254 【题目大意】 农夫约翰购买了一处肥沃的矩形牧场,分成M*N(1<=M<=12; 1<=N<=12)个格子。他想在那里的一些格子中种植美味的玉米。遗憾的是,有些格子区域的土地是贫瘠的,不能耕种。 精明的约翰知道奶牛们进食时不喜欢和别的牛相邻,所以一旦在一个格子中种植玉米,那...

anzhi7214的博客 254

【poj3254】Corn Fields

题目描述 农夫有一块地,被划分为m行n列大小相等的格子,其中一些格子是可以放牧的(用1标记),农夫可以在这些格子里放牛,其他格子则不能放牛(用0标记),并且要求不可以使相邻格子都有牛。现在输入数据给出这块地的大小及可否放牧的情况,求该农夫有多少种放牧方案可以选择(注意:任何格子都不放也是一种选择,不要忘记考虑! 输入 第一行:两个整数M和N,用空格隔开。 第2到第M+1行:每行包...

anweiyun4308的博客 126

【POJ3254】Corn Fields

http://poj.org/problem?id=3254 题意:给你一块n*m(0<n,m<=12)的地图,其中有的方格是肥沃的(用1表示),有的方格是贫瘠的(用0表示)。现在约翰要在肥沃的土地上放奶牛,且要求不能有两个奶牛相邻,请问有多少种方案数。 状压DP入门题。 首先预处理每一行不考虑贫瘠地时所有可行的放置状态,用states数组存着。 然后令f(i,j)为...

anlongshi2245的博客 220

POJ3254Corn Fields

题目链接:http://poj.org/problem?id=3254 Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13117 Accepted: 6869 Description Farmer John has p

jn_8316的博客 454

POJ 3254-Corn Fields

POJ 3254-Corn Fields

Yuric的专栏 516
上一篇: nyoj448 寻找最大数
下一篇: nyoj746 整数划分(四)
_IanXiao
博客等级 码龄12年 84粉丝 241原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值