当前位置: 首页 > news >正文

洛谷题单指南-状态压缩动态规划-P1879 [USACO06NOV] Corn Fields G

原题链接:https://www.luogu.com.cn/problem/P1879

题意解读:在m*n的区域种玉米,能种的是1不能种的是0,要求玉米不能种在相邻格子,求一共有多少种法,模100000000。

解题思路:

用状态压缩来表示一行玉米的种植情况,二进制中1表示种了,0表示没种。

对于一行状态,可以判断其合法性:相邻不能有连续1,在不能种的格子不能有1。

状态转移也很简单,通过枚举两行的合法状态,然后看两行状态是否存在上下相邻的1,不存在则可以转移。

状态表示:设f[i][j]表示前i行已种完,且第i行的状态为j的方案数

初始化:f[0][0] = 1,不种也是一种方案

状态转移:枚举所有第i行的状态j,枚举所有第i-1行的状态k,f[i][j] += f[i - 1][k]

结果:多枚举一行,枚举到第m+1行,答案是f[m + 1][0]

100分代码:

#include <bits/stdc++.h>
using namespace std;const int N = 15, MOD = 1e8;int mask[N];
int f[N][1 << 12];
vector<int> stat; //所有合法的状态
vector<int> mp[1 << 12]; //所有合法的状态转移
int m, n;int main()
{cin >> m >> n;for(int i = 1; i <= m; i++){for(int j = 0; j < n; j++){int x;cin >> x;if(x == 0) mask[i] |= (1 << j);}}//找到所有合法状态for(int i = 0; i < 1 << n; i++){if(i & i << 1) continue; //存在左右相邻的1stat.push_back(i);}//找到所有合法的状态转移for(auto i : stat){for(auto j : stat){if(i & j) continue; //存在上下相邻的1mp[i].push_back(j);}}f[0][0] = 1;for(int i = 1; i <= m + 1; i++){for(auto j : stat){if(mask[i] & j) continue; //第i行存在不能种的土地for(auto k : mp[j]){if(mask[i - 1] & k) continue; //第i - 1行存在不能种的土地f[i][j] = (f[i][j] + f[i - 1][k]) % MOD;}}}cout << f[m + 1][0];return 0;
}

 

http://www.sczhlp.com/news/5285/

相关文章:

  • throw 和 catch 关键字的作用
  • python分割长文本
  • Delphi中检测并记录TClientDataSet字段变更的技术实现
  • 3Ds Max 2019 安装使用全流程指南(图文讲解 | 含语言设置与授权配置)
  • markdown
  • Easysearch 集成阿里云与 Ollama Embedding API,构建端到端的语义搜索系统
  • eureka服务实例多节点容器部署
  • 【题解】dmy 2025 Summer day6 B
  • 异地多活 (图解+秒懂):不用 异地多活 , 你们 项目 怎么实现 高可用呢?
  • elementPlus的el-switch在初始化时会调用一次change事件
  • 兢兢业业勤勤恳恳写了十几年/纯Qt编写的视频监控系统新增功能总结/走到今天真不容易/支持国产系统和CPU
  • 反射内存卡基础:反射内存卡的基础架构
  • Springboot 定时任务 定时执行 定时关闭 配置文件实时配置
  • ZWCAD 批量打印
  • Diff算法的简单介绍
  • 洛谷P1433 吃奶酪(状压dp)
  • 一碰即传,重构跨设备文件分享体验
  • 广告拍卖模拟器AuctionGym获最佳论文奖
  • 2025.8
  • ZYNQ7010的FSBL启动分析
  • QT_0001:Linux相关命令
  • 如何为不可靠的大语言模型注入确定性
  • 真开眼了!利用招聘来盗取加密货币?
  • 简单的小球抛物线动画效果
  • java连接ActiveMQ时出现连接超时 java.net.ConnectException: Connection timed out: connect
  • 一个简单的Mysql备库脚本
  • python中__new__和__init__的区别
  • React ahooks——副作用类hooks之useThrottleFn - 详解
  • 题解:CF1651F Tower Defense
  • 有度鸿蒙全栈方案,安全协作新范式​