【HDU】6146 Pokémon GO
【题意】一个2*n的网格,再保证步数最少的情况下,求从任意格出发遍历完所有格的方案数,格子八连通。n<=10000,T<=100。
【算法】递推,DP
【题解】原题链接:蓝桥杯 格子刷油漆(动态规划)
这类题目最重要的是找到一个可以计算所有情况的状态表示。
对于2*x的网格,a[x]表示从左上角出发遍历完所有格子的方案数,b[x]表示从左上角出发遍历完所有格子并在左下角结束的方案数。
显然,b[x]=2*b[x-1]。
先考虑起点在左上角,有三种情况:
①先走到对面(左下角),再往右走,a[x]+=2*a[x-1]。
②终点在对面,a[x]+=b[x]。
③先走到第二列再折返再走到第二列,此时等价于第二列的第一种情况,a[x]+=4*a[x-2]。
公式合并为a[x]=2*a[x-1]+4*a[x-2]+b[x]。
一共有四个角,所以ans+=4*a[x]。
再考虑起点在第一行(不包括左右上角),必须要先遍历完一边回到下方再遍历另一边才能保证遍历完全部。
对于先遍历一边的情况,等价于出发后回到下方的b[i],再遍历另一边的情况,等价于从一角出发的a[i]。
所以对于每个中间点i,ans+=2*(2*b[i-1]*2*a[n-i])+2*(2*b[n-i]*2*a[i-1]) 。
ans=16*sigma(b[i-1]*a[n-i])(i=2~n-1)+4*a[n]。
---
有取模别写“+=”!
爆long long了要中间多写点取模……2*int是撞在ll枪口上的,多一点就爆了。
---
#include<cstdio>
#define ll long long
const int maxn=,MOD=;
ll a[maxn],b[maxn],n;
int main(){
b[]=;
for(int i=;i<=maxn;i++)b[i]=(b[i-]*)%MOD;
a[]=;a[]=;
for(int i=;i<=maxn;i++)a[i]=(*a[i-]+b[i]+*a[i-])%MOD;
int T;
scanf("%d",&T);
while(T--){
int n;
scanf("%d",&n);
ll ans=;
for(int i=;i<=n-;i++)ans=(ans+*b[i-]%MOD*a[n-i])%MOD;
ans=(ans+*a[n])%MOD;
if(n==)ans=;
printf("%lld\n",ans);
}
return ;
}
能把这个公式换成一个数组的递推公式真是太可怕了。
f[1]=2 f[2]=24 f[3]=96 f[4]=416 f[5]=1536
f[i]=f[i-1]*6-f[i-2]*8-f[i-3]*8+f[i-4]*16 (i>=6)
【HDU】6146 Pokémon GO的更多相关文章
- 【HDU】4888 Redraw Beautiful Drawings 网络流【推断解是否唯一】
传送门:pid=4888">[HDU]4888 Redraw Beautiful Drawings 题目分析: 比赛的时候看出是个网络流,可是没有敲出来.各种反面样例推倒自己(究其原因 ...
- 【HDU】2191 多重背包问题
原题目:悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 [算法]多重背包(有限背包) 动态规划 [题解]http://blog.csdn.net/acdreamers/article/detail ...
- 【HDU】6110 路径交(2017百度之星) 线段树+RMQ-LCA+树链的交
[题目]2017"百度之星"程序设计大赛 - 初赛(A) [题意]给定n个点的带边权树,m条编号1~m的路径,Q次询问编号区间[L,R]所有链的交集的长度.n<=500000 ...
- 【HDU】6148 Valley Numer 数位DP
[算法]数位DP [题意]定义V-number为从左到看单位数字未出现先递增后递减现象的数字,求0~N中满足条件的数字个数.T<=200,lenth(n)<=100 [题解]百度之星201 ...
- 【HDU】5269 ZYB loves Xor I
[算法]trie [题解] 为了让数据有序,求lowbit无法直接排序,从而考虑倒过来排序,然后数据就会呈现出明显的规律: 法一:将数字倒着贴在字典树上,则容易发现两数的lowbit就是它们岔道结点的 ...
- 【HDU】3068 最长回文
[算法]manacher [题解][算法]字符串 #include<cstdio> #include<algorithm> #include<cstring> us ...
- 【HDU】2222 Keywords Search
[算法]AC自动机 [题解]本题注意题意是多少关键字能匹配而不是能匹配多少次,以及可能有重复单词. 询问时AC自动机与KMP最大的区别是因为建立了trie,所以对于目标串T与自动机串是否匹配只需要直接 ...
- 【HDU】6012 Lotus and Horticulture (BC#91 T2)
[算法]离散化 [题解] 答案一定存在于区间的左右端点.与区间左右端点距离0.5的点上 于是把所有坐标扩大一倍,排序(即离散化). 让某个点的前缀和表示该点的答案. 初始sum=∑c[i] 在l[i] ...
- 【HDU】6242-Geometry Problem
今天忽然心血来潮打开牛客网尝试了一下一站到底 前四道题都是不到二十分钟切完,然后第五道来了道计算几何 我也不会啊,于是就觉得大力随机也许可行 然鹅被精度卡到崩溃 后来我才知道 保证有解,是保证你的精度 ...
随机推荐
- android get cpu rate
public static int getProcessCpuRate() { try { RandomAccessFile reader = new RandomAccessFile("/ ...
- 27、理解js的继承机制(转载自阮一峰)
Javascript继承机制的设计思想 作者: 阮一峰 日期: 2011年6月 5日 我一直很难理解Javascript语言的继承机制. 它没有"子类"和"父类&qu ...
- C++学习007-使用exit退出进程
使用exit可以实现退出当前进程. 如下 在程序接收到一个字符后,就退出进程 编写环境 vs2015 int main() { int a = 10, b = 20; std::cout <&l ...
- 【LoadRunner】解决LR11无法录制Chrome浏览器脚本问题
LoadRunner录制脚本时,遇到高版本的IE.FireFox,或者Chrome浏览器,会出现无法录制脚本的问题,下面就来讲一下如何利用LR自带的wplus_init_wsock.exe插件进行脚本 ...
- Vue组件间通信:一个例子学会Vue组件-Vue.js学习总结)(转载)
详情请点击 http://www.jianshu.com/p/9ad1ba89a04b
- Socket常见错误代码与描述
最近程序 出现 几次 Socket 错误, 为了便于 差错.. 搜了一些 贴在这里.. 出现网络联机错误Socket error #11001表示您的计算机无法连上服务器,请检查您的Proxy设定以及 ...
- BZOJ4584 APIO2016赛艇(动态规划+组合数学)
如果值域不大,容易想到设f[i][j]为第i个学校选了j的方案数,枚举上一个学校是哪个选了啥即可,可以前缀和优化.于是考虑离散化,由于离散化后相同的数可能可以取不同的值,所以枚举第一个和其所选数(离散 ...
- 【学习笔记】Learning OpenCV3——Ch8 working with video
Reading Video with the cv::VideoCapture Object 对象创建的三种方法: // 1. Input filename cv::VideoCapture::Vid ...
- linq.js的用法
linq.js 详细介绍 linq.js 是一个 JavaScript 实现的 LINQ. 主要特性: 实现所有 .NET 4.0 的方法 complete lazy evaluation full ...
- cdh版本的hadoop安装及配置(伪分布式模式) MapReduce配置 yarn配置
安装hadoop需要jdk依赖,我这里是用jdk8 jdk版本:jdk1.8.0_151 hadoop版本:hadoop-2.5.0-cdh5.3.6 hadoop下载地址:链接:https://pa ...