描述
小 D 特别喜欢玩游戏。这一天,他在玩一款填数游戏。
这个填数游戏的棋盘是一个n × m的矩形表格。玩家需要在表格的每个格子中填入一个数字(数字 0 或者数字 1),填数时需要满足一些限制。
下面我们来具体描述这些限制。
为了方便描述,我们先给出一些定义:
• 我们用每个格子的行列坐标来表示一个格子,即(行坐标,列坐标)。(注意:行列坐标均从 0 开始编号)
• 合法路径 P:一条路径是合法的当且仅当:
这条路径从矩形表格的左上角的格子(0,0)出发,到矩形的右下角格子(n − 1, m − 1)结束;
在这条路径中,每次只能从当前的格子移动到右边与它相邻的格子,或者从当前格子移动到下面与它相邻的格子。
例如:在下面这个矩形中,只有两条路径是合法的,它们分别是?1:(0,0) → (0,1) →(1,1)和?2:(0,0) → (1,0) → (1,1)。

对于一条合法的路径 P,我们可以用一个字符串w§来表示,该字符串的长度为n +m − 2,其中只包含字符“R”或者字符“D”,第 i 个字符记录了路径 P 中第 i 步的移动方法,“R”表示移动到当前格子右边与它相邻的格子,“D”表示移动到当前格子下面与它相邻的格子。例如,上图中对于路径?1,有w(P1) = “RD”;而对于另一条路径?2,有w(P2) = “DR”。
同时,将每条合法路径 P 经过的每个格子上填入的数字依次连接后,会得到一个长度为n + m − 1的 01 字符串,记为 s§。例如,如果我们在格子(0,0)和(1,0)上填入数字0,在格子(0,1)和(1,1)上填入数字 1(见上图红色数字)。那么对于路径?1,我们可以得到s(P1) = “011”,对于路径?2,有s(P2) = “001”。
游戏要求小 D 找到一种填数字 0、1 的方法,使得对于两条路径?1,P2,如果w(P1) >w(P2),那么必须s(P1) ≤ s(P2)。我们说字符串 a 比字符串 b 小,当且仅当字符串 a 的字典序小于字符串 b 的字典序,字典序的定义详见第一题。但是仅仅是找一种方法无法满足小 D 的好奇心,小 D 更想知道这个游戏有多少种玩法,也就是说,有多少种填数字的方法满足游戏的要求?
小 D 能力有限,希望你帮助他解决这个问题,即有多少种填 0、1 的方法能满足题目要求。由于答案可能很大,你需要输出答案对10^9 + 7取模的结果。
输入
输入文件共一行,包含两个正整数 n、m,由一个空格分隔,表示矩形的大小。其中 n 表示矩形表格的行数,m 表示矩形表格的列数。
输出
输出共一行,包含一个正整数,表示有多少种填 0、1 的方法能满足游戏的要求。
注意:输出答案对 10^9+7 取模的结果。
样例输入
2 2
样例输出
12
提示
【样例解释】

【输入样例2】
5 5
【输出样例2】
7136

可以显然看出满足的首要条件是从左下到右上的任意一条对角线是单调不增的

显然看出n=2n=2n=2的时候答案是4∗3m−14*3^{m-1}4∗3m−1

但是3的时候就懵逼了

只能暴力枚举3以内的然后50分滚粗

因为有这样一种情况
(1,1),(1,2),(2,2),(3,2),(3,3)(1,1),(1,2),(2,2),(3,2),(3,3)(1,1),(1,2),(2,2),(3,2),(3,3)和(1,1),(2,1),(2,2),(2,3),(3,3)(1,1),(2,1),(2,2),(2,3),(3,3)(1,1),(2,1),(2,2),(2,3),(3,3)这两条路径就不行

正解是轮廓线状压dp

然而我不会

只能搜索打表

规律是一个三维的等比数列

跑了一下午终于跑出来了233……

上代码(我也不知道该怎么讲了)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll mod=1e9+7;
int n,m;
inline int read(){char ch=getchar();int res=0;while(!isdigit(ch))ch=getchar();while(isdigit(ch))res=(res<<3)+(res<<1)+(ch^48),ch=getchar();return res;
}
inline ll ksm(ll a,int n){ll res=1;for(;n;n>>=1,a=a*a%mod)if(n&1)res=res*a%mod;return res%mod;
}
int main(){n=read(),m=read();if(n>m)swap(n,m);if(n==1){cout<<ksm(2,m)<<'\n';}if(n==2){cout<<4*ksm(3,m-1)%mod<<'\n';}if(n==3){cout<<112*ksm(3,m-3)%mod<<'\n';}if(n==4){if(m==4)puts("912");else cout<<2688*ksm(3,m-5)%mod<<'\n';}if(n==5){if(m==5)puts("7136");else cout<<21312*ksm(3,m-6)%mod<<'\n';}if(n==6){if(m==6)puts("56768");else cout<<170112*ksm(3,m-7)%mod<<'\n';}if(n==7){if(m==7)puts("453504");else cout<<1360128*ksm(3,m-8)%mod<<'\n';}if(n==8){if(m==8)puts("3626752");else cout<<10879488*ksm(3,m-9)%mod<<'\n';}
}

最后
推广一下另外几篇题解:
DAY1T1:铺设道路:(并查集??)
DAY1T2:货币系统:(完全背包/搜索)
DAY1T3:赛道修建:(二分答案+贪心策略)
DAY2T1:旅行:(基环树搜索)
DAY2T2:填数游戏:(暴力搜索找规律)
DAY2T3:保卫王国:(动态dp+Splay)

转载于:https://www.cnblogs.com/stargazer-cyk/p/10366392.html

【NOIP2018】DAY2T2——填数游戏(轮廓线状压的dp?搜索打表)相关推荐

  1. #535. 「NOIP2018」填数游戏

    代码: #include<cstdio> #include<cstring> #include<algorithm> #define P 1000000007 us ...

  2. 【NOIP2018提高组D2T2】填数游戏

    前言--2020.10.17 下面的公式推导似乎有些出锅,具体情况就看图想想. Description 小D特别喜欢玩游戏.这一天,他在玩一款填数游戏. 这个填数游戏的棋盘是一个n*m的矩形表格.玩家 ...

  3. 【NOIP2018】D2T2 填数游戏

    @填数游戏@ @题目描述@ @题解@ @代码@ @end@ @题目描述@ 小 D 特别喜欢玩游戏.这一天,他在玩一款填数游戏. 这个填数游戏的棋盘是一个 n×m 的矩形表格.玩家需要在表格的每个格子中 ...

  4. 枚举算法5——填数游戏

    填数游戏,如图所示每个汉字代表一个数字,不同的汉字代表数字不同,要求填写这些汉字代表的数字. [分析] 从图中可以看出,共有5个汉字,每个汉字是数字0~9中的一个.显然"北"和&q ...

  5. P5023 填数游戏

    题目描述 小 D 特别喜欢玩游戏.这一天,他在玩一款填数游戏. 这个填数游戏的棋盘是一个n×m的矩形表格.玩家需要在表格的每个格子中填入 一个数字(数字 0或者数字 1),填数时需要满足一些限制. 下 ...

  6. 1908: 【18NOIP提高组】填数游戏

    [题目描述] 小 D 特别喜欢玩游戏.这一天,他在玩一款填数游戏. 这个填数游戏的棋盘是一个n×mn×m的矩形表格.玩家需要在表格的每个格子中填入一个数字(数字 00 或者数字 11),填数时需要满足 ...

  7. 170713 逆向-填数游戏

    1625-5 王子昂 总结<2017年7月13日> [连续第284天总结] A. CISCN 结合WP再战RE B. 这么久之后完整的wp终于出来了,回过头再做一遍之前的re 首先是最早放 ...

  8. 【NOIP 2018 提高组】填数游戏

    传送门 problem 小 D 特别喜欢玩游戏.这一天,他在玩一款填数游戏. 这个填数游戏的棋盘是一个 n×mn \times mn×m 的矩形表格.玩家需要在表格的每个格子中填入一个数字(数字 00 ...

  9. 啊哈添柴挑战Java1581. 填数游戏(入门版)

    啊哈添柴--挑战 1581. 填数游戏(入门版) /*** @author yinglongwu*/ //1581. 填数游戏(入门版) public class Main {public stati ...

最新文章

  1. ppt算是php的一种吗,ppt放映快捷键是什么
  2. 下面使用计算机动画制作的,2020年最新电大《计算机二维动画制作》形考作业任务01-03网考试题及答案(10页)-原创力文档...
  3. 一步一步SharePoint 2007之三十一:实现文档Event Handler(3)——附加Handler程序
  4. java的socket读取一行就结束运行了?使用这种方法可以读取多行数据!
  5. 数据库同步热备方案(云南某金属企业)
  6. i386和X86各是什么意思
  7. django 怎么加权限 静态资源目录_Django:settings中关于static静态文件目录的设置...
  8. HTML - 超文本标记语言 (Hyper Text Markup Language)
  9. Python开发【第五篇】迭代器、生成器、递归函数、二分法
  10. 安卓手机管理_安卓手机:管理工具
  11. 饿了么想解决外卖小哥马路杀手的问题,但用无人机?
  12. vue 图片切换动态绑定
  13. BOOST库介绍(四)——文件系统相关
  14. windows 获取当前进程所占内存
  15. 【竞品分析】腾讯QQ手机浏览器与UC手机浏览器产品对比
  16. Power bi 1.2连接文本文件
  17. 技术人员的狂欢 | 看雪2020第四届安全开发者峰会顺利落幕
  18. 范宝兴:幻方与类自然数幻方(上)「片桐善直8阶间隔幻方」「同心6阶/8阶/10阶」...
  19. jaybird+x3+android,小米首款运动耳机
  20. JavaWeb Day02(动力节点)

热门文章

  1. 快速排序(过程图解 参考啊哈算法)
  2. java 并发demo_《Java并发编程实践》中4.3.5章demo的一个疑问?
  3. 抖音云控_抖音云控/快手云控:引领5G电商短视频新潮流
  4. 深度学习导论(5)手写数字识别问题步骤
  5. 关于SQL语言,这些你不得不了解!
  6. 状态压缩DP(大佬写的很好,转来看)
  7. MySql允许被远程访问
  8. [深度学习] DeepFM 介绍与Pytorch代码解释
  9. 【cudnn】cudnn 安装
  10. About Manhattan Length