NYOJ-1273-宣传墙
ACM模版
描述
题解
这个问题十分有趣,因为我做不出来!!!
去年河南 ACM 省赛的第二道题,当时耽搁了我好久好久时间依然无果,最后只好作罢,放了好久没有补,今天忽然想起来,看了看代码,发现并不能完全理解,但是知道这道题肯定是递推找规律的,然而我就是静不下心来慢慢发掘其规律。作为一个职业马后炮,需要说的是,这个题可以用 dp 解,也可以用矩阵快速幂解,但是两种方法都不外乎递推找规律,那么问题来了,这个递推是什么呢?
一开始,我看了矩阵快速幂的解法,矩阵快速幂部分可以理解,但是递推部分的判断我却无法顿悟,0和1究竟表示什么?这个问题惆怅了我一下午,晚上搞来了一份神犇的题解手稿照片,看了后,顿悟啊,点赞,杠杠的,在此,为表达对神犇虔诚的敬意,故将此题解照片分享给大家,虽然不知道神犇何许人也,但是还是十分感谢他这份牛逼哄哄的题解~~~渣渣在此献上膝盖——Orz
(1)
(2)
(3)
(4)
(5)
(6)
(7)
大人真乃神人也~~~
最后,这个题用 dp 写需要用到状压 dp + 滚动数组,既费时又费钱,用矩阵快速幂搞会快很多很多,也更加经济实惠。
代码
#include <iostream>
#include <cstdio>
#include <cstring>using namespace std;const int MOD = 997;
const int MAXN = 16;struct mat
{int A[MAXN][MAXN];mat(){memset(A, 0, sizeof(A));}mat operator * (const mat &a) const{mat b;for (int i = 0; i < MAXN; i++){for (int j = 0; j < MAXN; j++){for (int k = 0; k < MAXN; k++){b.A[i][j] += A[i][k] * a.A[k][j];b.A[i][j] %= MOD;}}}return b;}
};mat map;bool cmp(int i, int j) // 状态 j 对状态 i 是否可行 j 是 col 列的状态 i 是 col - 1 列的状态
{for (int row = 0; row < 4; row++){if ((i >> row) & 1){if ((j >> row) & 1){
// if (row == 3) // 这个特判有没有都行,因为 i >> 4 肯定为 0
// { // 这样不过是思维更严谨些
// return false;
// }if ((i >> (row + 1)) & 1){i -= (1 << (row + 1)); // 等价于 i ^= 1 << (rank + 1),前边的写法不太直观}else{return false;}}else{continue;}}else{if ((j >> row) & 1){continue;}else{return false;}}}return true;
}// 构造单元矩阵
void unit()
{for (int i = 0; i < MAXN; i++){for (int j = 0; j < MAXN; j++){map.A[i][j] = cmp(i, j);}}
}int slove(int n)
{mat a;mat b = map;for (int i = 0; i < MAXN; i++){a.A[i][i] = 1;}while (n){if (n & 1){a = a * b;}b = b * b;n >>= 1;}return a.A[MAXN - 1][MAXN - 1];
}int main ()
{int T;scanf("%d", &T);unit();while (T--){int N, M, K;scanf("%d%d%d", &N, &M, &K);printf("%d %d\n", slove(M - 1), slove(N - M - K + 1));}return 0;
}
NYOJ-1273-宣传墙相关推荐
- nyoj 1273 宣传墙
题目链接:点击打开链接 题意:给你一个4*n的矩阵,你有1*2的砖头若干,让你进行铺砖,在中间m ---- m+k的部分你不用铺.问左边和右边的方法数各位多少. 题解:因为数据偏大,需要滚动数组来优化 ...
- nyoj-1273 宣传墙
题目1273 题目信息 运行结果 本题排行 讨论区 宣传墙 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的游客特别多 ...
- 骨牌覆盖问题总结!hihoCoder/ NYOJ-1273宣传墙1151
本想着做一下第九届河南省省赛题,结果被这个类似骨牌覆盖的题卡住了,队友然我去hihoCoder上老老实实把骨牌覆盖一.二.三做完,这题就没什么问题了.虽然很不情愿,但还是去见识了一下. 骨牌覆盖问题 ...
- nyoj1273 河南省第九届省赛_宣传墙、状压DP+矩阵幂加速
宣传墙 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的游客特别多.CBA 镇长准备在一条道路南 面 4*N 的墙上做 ...
- NYOJ_1273_宣传墙
/* 宣传墙 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的游客特别多.CBA 镇长准备在一条道路南 面 4*N 的 ...
- NYOJ - [第九届河南省程序设计大赛]宣传墙(DP)
题目链接:http://nyoj.top/problem/1273 内存限制:64MB 时间限制:1000ms 题目描述 ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的游客特别多.CBA 镇长准 ...
- 第九届河南省赛 宣传墙 //状压dp+矩阵快速幂+dfs
http://nyoj.top/problem/1273 状压dp+矩阵快速幂+dfs 1273-宣传墙 内存限制:64MB 时间限制:1000ms 特判: No 通过数:19 提交数:64 难度:4 ...
- 【ACM省赛】第九届河南省程序设计大赛 B 宣传墙
题目链接:http://nyoj.top/web/contest/problem/cid/13/num/B 题目: 用1*2的地砖,填满4*N的墙,有多少种方案. 题解: 状压dp,枚举每个状态的可能 ...
- ZZULIOJ 1924: 宣传墙 (dp)
时间限制: 1 Sec 内存限制: 128 MB 提交: 53 解决: 16 [提交] [状态] [讨论版] [命题人:admin] 题目描述 ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的 ...
- 计算机社团宣传招新活动方案,社团招新策划书范本及活动方案
社团招新策划书范本及活动方案 新的学期,新的开始,在社团招新活动开始前,如何写策划书呢?以下是小编为大家提供的社团招新策划书范本,供大家参考借鉴! 社团招新策划书范本(一):青年志愿者协会 一.招新目 ...
最新文章
- arcgis运行python脚本一段时间后会卡,为什么这个python多处理脚本在一段时间后会变慢?...
- 【机器学习】基于opencv实现目标检测,error LNK2001: unresolved external symbol public: virtual bool CvSVM::train...
- python——常用内置函数(enumerate、map、zip、eval)用法
- ABAP程序中调用不同类型的函数弹出不同的消息对话框
- sparkstreaming(1)——实战
- 招聘| 基因组所Yuwen Liu团队诚聘科研人员
- MySQL 基础知识(基本架构、存储引擎差异)
- Java(TM) platform SE binary 占用cpu过高
- Android FrameWork——Binder机制详解(1)
- 20200628每日一句
- 【TSP】基于matlab模拟退火算法求解31城市旅行商问题【含Matlab源码 1148期】
- rtmp服务器开源项目,rtmp直播相关的开源项目
- mp3处理工具(mp3agic)
- 电机开环控制与闭环控制
- 磁盘管理器显示状态良好 计算机不显示,win7系统打开磁盘管理显示显示状态良好(有危险)的解决方法...
- 时尚唯美婚礼视频制作AE标题模板 Wedding Responsive Titles
- mysql查询当前用户中所有的表空间_oracle查看用户所在的表空间
- CS231n_learn
- 为什么short类型取值范围为-32768~32767
- 敏捷测试——打通开发与测试的壁垒!
热门文章
- java学习笔记第二周(一)
- 物流服务--查询物流
- 关于STM8的程序下载问题:SWIM Error[30006]报错解决办法汇总
- 眼睛结构粗分离 - 巩膜 - 虹膜
- 帆软BI工具Fine BI连接数据库
- 企业高管和高收入人群必读的税务筹划策略!
- Y件DOOK: VSC 安装 谷歌浏览器调试 固件插件 Debugger for Chorme
- git push时报错error: File: xxx 252.15 MB, exceeds 100.00 MB.
- Java中Switch选择语句的用法
- CODJ 1070 秋实大哥打游戏 并查集