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-宣传墙相关推荐

  1. nyoj 1273 宣传墙

    题目链接:点击打开链接 题意:给你一个4*n的矩阵,你有1*2的砖头若干,让你进行铺砖,在中间m ---- m+k的部分你不用铺.问左边和右边的方法数各位多少. 题解:因为数据偏大,需要滚动数组来优化 ...

  2. nyoj-1273 宣传墙

    题目1273 题目信息 运行结果 本题排行 讨论区 宣传墙 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的游客特别多 ...

  3. 骨牌覆盖问题总结!hihoCoder/ NYOJ-1273宣传墙1151

    本想着做一下第九届河南省省赛题,结果被这个类似骨牌覆盖的题卡住了,队友然我去hihoCoder上老老实实把骨牌覆盖一.二.三做完,这题就没什么问题了.虽然很不情愿,但还是去见识了一下.  骨牌覆盖问题 ...

  4. nyoj1273 河南省第九届省赛_宣传墙、状压DP+矩阵幂加速

    宣传墙 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的游客特别多.CBA 镇长准备在一条道路南 面 4*N 的墙上做 ...

  5. NYOJ_1273_宣传墙

    /* 宣传墙 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的游客特别多.CBA 镇长准备在一条道路南 面 4*N 的 ...

  6. NYOJ - [第九届河南省程序设计大赛]宣传墙(DP)

    题目链接:http://nyoj.top/problem/1273 内存限制:64MB 时间限制:1000ms 题目描述 ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的游客特别多.CBA 镇长准 ...

  7. 第九届河南省赛 宣传墙 //状压dp+矩阵快速幂+dfs

    http://nyoj.top/problem/1273 状压dp+矩阵快速幂+dfs 1273-宣传墙 内存限制:64MB 时间限制:1000ms 特判: No 通过数:19 提交数:64 难度:4 ...

  8. 【ACM省赛】第九届河南省程序设计大赛 B 宣传墙

    题目链接:http://nyoj.top/web/contest/problem/cid/13/num/B 题目: 用1*2的地砖,填满4*N的墙,有多少种方案. 题解: 状压dp,枚举每个状态的可能 ...

  9. ZZULIOJ 1924: 宣传墙 (dp)

    时间限制: 1 Sec  内存限制: 128 MB 提交: 53  解决: 16 [提交] [状态] [讨论版] [命题人:admin] 题目描述 ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的 ...

  10. 计算机社团宣传招新活动方案,社团招新策划书范本及活动方案

    社团招新策划书范本及活动方案 新的学期,新的开始,在社团招新活动开始前,如何写策划书呢?以下是小编为大家提供的社团招新策划书范本,供大家参考借鉴! 社团招新策划书范本(一):青年志愿者协会 一.招新目 ...

最新文章

  1. arcgis运行python脚本一段时间后会卡,为什么这个python多处理脚本在一段时间后会变慢?...
  2. 【机器学习】基于opencv实现目标检测,error LNK2001: unresolved external symbol public: virtual bool CvSVM::train...
  3. python——常用内置函数(enumerate、map、zip、eval)用法
  4. ABAP程序中调用不同类型的函数弹出不同的消息对话框
  5. sparkstreaming(1)——实战
  6. 招聘| 基因组所Yuwen Liu团队诚聘科研人员
  7. MySQL 基础知识(基本架构、存储引擎差异)
  8. Java(TM) platform SE binary 占用cpu过高
  9. Android FrameWork——Binder机制详解(1)
  10. 20200628每日一句
  11. 【TSP】基于matlab模拟退火算法求解31城市旅行商问题【含Matlab源码 1148期】
  12. rtmp服务器开源项目,rtmp直播相关的开源项目
  13. mp3处理工具(mp3agic)
  14. 电机开环控制与闭环控制
  15. 磁盘管理器显示状态良好 计算机不显示,win7系统打开磁盘管理显示显示状态良好(有危险)的解决方法...
  16. 时尚唯美婚礼视频制作AE标题模板 Wedding Responsive Titles
  17. mysql查询当前用户中所有的表空间_oracle查看用户所在的表空间
  18. CS231n_learn
  19. 为什么short类型取值范围为-32768~32767
  20. 敏捷测试——打通开发与测试的壁垒!

热门文章

  1. java学习笔记第二周(一)
  2. 物流服务--查询物流
  3. 关于STM8的程序下载问题:SWIM Error[30006]报错解决办法汇总
  4. 眼睛结构粗分离 - 巩膜 - 虹膜
  5. 帆软BI工具Fine BI连接数据库
  6. 企业高管和高收入人群必读的税务筹划策略!
  7. Y件DOOK: VSC 安装 谷歌浏览器调试 固件插件 Debugger for Chorme
  8. git push时报错error: File: xxx 252.15 MB, exceeds 100.00 MB.
  9. Java中Switch选择语句的用法
  10. CODJ 1070 秋实大哥打游戏 并查集