【进阶指南】玉米田【状压DP】

本文介绍了农夫约翰在M×N的田地中种植玉米的问题,其中部分土地不适宜种植,且相邻土地不能同时种植。通过动态规划方法求解不同种植方案的总数,对108取模后的结果。文章详细阐述了动态规划的状态定义、合法状态的预处理以及状态转移的核心思想,并给出了代码实现。
摘要由CSDN通过智能技术生成

Date:2022.04.08
题意描述:
农夫约翰的土地由 M×N 个小方格组成,现在他要在土地里种植玉米。
非常遗憾,部分土地是不育的,无法种植。
而且,相邻的土地不能同时种植玉米,也就是说种植玉米的所有方格之间都不会有公共边缘。
现在给定土地的大小,请你求出共有多少种种植方法。
土地上什么都不种也算一种方法。
输入格式
第 1 行包含两个整数 M 和 N。
第 2…M+1 行:每行包含 N 个整数 0 或 1,用来描述整个土地的状况,1 表示该块土地肥沃,0 表示该块土地不育。
输出格式
输出总种植方法对 108 取模后的值。
数据范围
1≤M,N≤12
输入样例:
2 3
1 1 1
0 1 0
输出样例:
9

思路: f [ i ] [ j ] : f[i][j]: f[i][j]:已在前 i i i行放完,且第 i i i行放玉米的状态为 j j j的合法方案数。
首先我们注意到每一行都有荒地,我们标记 h u a n g [ i ] huang[i] huang[i]为第 i i i行荒地的状态,这一位值为1则表示这个点是荒地。
首先我们最新放的第 i i i行状态要合法,即:第 i i i行不能存在连续两个1。因此我们预处理出所有的单行合法状态,之后枚举每一行状态时只枚举这些合法状态即可。
核心思想分三步:
①枚举每一行。
②枚举第 i i i行放的状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值