hdu 6146 Pokémon GO (计数)
为了不让度度熊失望,精灵球已经被事先放置在一个2*N的格子上,每一个格子上都有一个精灵球。度度熊可以选择任意一个格子开始游戏,抓捕格子上的精灵球,然后移动到一个相邻的至少有一个公共点的格子上继续抓捕。
现在度度熊希望知道将所有精灵球都抓到并且步数最少的方案数目。
●1≤T≤100
●1≤N≤10000
一道计数问题,重点就是要做到不重不漏.
怎样步数最短呢?当然是每个格子都只经过1次啦.
然后我们注意到如果这个起点选在中间的第i列,我们就把这个格子划分成了左右两个部分
感觉就是对于某个起点然后左右两部分是之前求过的答案直接相乘,不同起点再相加就可以了,但是关键问题是我们怎样计数呢?
我们设 Bn 代表从某个角(如左上角)出发,然后走遍所有格子回到同一列的方案数目。
同样,我们设 An 代表从某个角出发,然后走遍所有格子的方案数。
下面我们来解释这个式子
第一项表示从某个角开始最后回到起点的同一列的那个角
第二项表示从某个角开始,第二步走与起点相同列的那个角,第三步我们向第二列走的时候就有两种走法了(选择直接向右或者走对角线,乘的那个2)
从第四步开始我们现在面对的问题就是了
第三项中4可以看成2*2,
我们把前两列写成这个样子
1 | 2 |
3 | 4 |
第一个2代表走一个(1 2 3 4)和(1 4 3 2)有两种走法起点在第一列而终点在第二列
第二个2代表对于每一个到达第二列后第五步向第三列走的时候都有两种走法(向右或者走对角线)
从第六步开始时我们面对的问题就是了
我们现在来考虑下正经问题
首先有4个角,那么ans先加上
但是如果我们起点选在中间呢?
假设我们选在了第i列,首先这一列有两个格子 所以先乘个2
现在我们可以选择先往左跑,我们可以直接向左,也可以走一个向左的对角线.再乘个2
注意往左跑完1~i-1列以后一点要跑到第i列那个"不是起点的点"否则没法往右跑,所以乘的是
现在我们又回到了第i列,现在我们向右跑,又有两种情况,直接向右,向右的对角线 再乘个2
现在我们到了i+1列对于右半部分(i+1~n)我们只要跑完就行了,我们不关心终点所以乘
这样一开始向左跑就是,一开始向右跑自然是
#include <bits/stdc++.h> using namespace std;
typedef long long ll;
const int maxn = ;
const ll mod = 1e9+;
ll a[maxn],b[maxn];
void init()
{
b[]=;
for (int i=;i<maxn;++i){
b[i] = (b[i-]*)%mod;
}
a[] = ;
a[] = ;
for (int i=;i<maxn;++i)
a[i] = (b[i]%mod+(*a[i-]%mod)+(*a[i-])%mod)%mod;
}
int n;
int main()
{
init();
int T;
scanf("%d",&T);
while (T--){
scanf("%d",&n);
if (n==){
printf("%d\n",);
}
else{
ll ans = ;
ans = (a[n]*)%mod;
for (int i=;i<n;++i){
ans = (ans+*( ( ( (*b[i-])%mod) *( (*a[n-i])%mod ) + ( (*a[i-])%mod) *( (*b[n-i])%mod ) )%mod )%mod)%mod;
}
printf("%lld\n",ans);
}
}
return ;
}
hdu 6146 Pokémon GO (计数)的更多相关文章
- HDU 6146 Pokémon GO DP,计数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6146 题意:~ 解法:原题..http://blog.csdn.net/y990041769/arti ...
- 2017"百度之星"程序设计大赛 - 复赛1003&&HDU 6146 Pokémon GO【数学,递推,dp】
Pokémon GO Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 【HDU】6146 Pokémon GO
[题意]一个2*n的网格,再保证步数最少的情况下,求从任意格出发遍历完所有格的方案数,格子八连通.n<=10000,T<=100. [算法]递推,DP [题解]原题链接:蓝桥杯 格子刷油漆 ...
- [ACM] hdu 3923 Invoker (Poyla计数,高速幂运算,扩展欧几里得或费马小定理)
Invoker Problem Description On of Vance's favourite hero is Invoker, Kael. As many people knows Kael ...
- HDU - 4305 - Lightning 生成树计数 + 叉积判断三点共线
HDU - 4305 题意: 比较裸的一道生成树计数问题,构造Krichhoof矩阵,求解行列式即可.但是这道题还有一个限制,就是给定的坐标中,两点连线中不能有其他的点,否则这两点就不能连接.枚举点, ...
- hdu 3908 Triple(组合计数、容斥原理)
Triple Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Others) Total Su ...
- hdu 6093---Rikka with Number(计数)
题目链接 Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, s ...
- B - Cube HDU - 1220 (数学计数)
题意:一个边长为N的正方体,切割成N*N*N个单位正方体,问有多少对正方体之间有0个,2个公共点. 思路:因为正方体之间出现公共点的情况有0,2,4. 那么直接正面求,肯定不好求,那么先求出有4个公共 ...
- HDU 4055 Number String (计数DP)
题意:由数字1到n组成的所有排列中,问满足题目所给的n-1个字符的排列有多少个,如果第i字符是‘I’表示排列中的第i-1个数是小于第i个数的. 如果是‘D’,则反之. 析:dp[i][j] 表示前 i ...
随机推荐
- Not a Number (NaN)
NaN can be produced by: 1. 0/0 2. Inf - Inf 3. Inf/Inf 4. 0*Inf 5. rem(x,y), where y=0 or x=Inf
- scrapy-redis debug视频
前言 在上一篇笔记说过会录个视频帮助理解里面的类方法,现在视频来了.只录了debug scheduler.py里面的类方法,还有spiders.py里面的类方法差不多,就不说了,自己动手丰衣足食.限于 ...
- MySQL 对比数据库的表结构
有时候,需要对比一下测试环境和生产环境中,数据库的表结构是否有所差异.有两个常用的工具. AmpNmp.DatabaseCompare GUI 界面,支持多种数据库(MySQL.SQL Server. ...
- 史上最全 ——LINQ to SQL语句
LINQ to SQL语句(1)之Where 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句.Where操 ...
- tp框架视图层view——模板继承
在做网站的时候,每个网站都有头部和尾部,也就是菜单栏和页脚,网站的各个子网页的头部和尾部基本就是一样的,所以tp框架提供了一种模板继承的方法: 1.首先在View的Main文件夹下建立一个base.h ...
- 命令行打包war包
输入jar -cvf 包名.war 目录/*
- Dedecms织梦后台登陆验证码不显示几种解决方法
Dedecms织梦后台登陆验证码不显示几种解决方法,服务器所造成的验证码不显示问题看这里: 方法一:查看服务器的php版本是否与程序版本兼容(织梦程序PHP版本查看方法:打开www.96net.com ...
- 【转】通俗理解Java序列化与反序列化
一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存 ...
- go web编程——实现一个简单分页器
在go web编程中,当需要展示的列表数据太多时,不可避免需要分页展示,可以使用Go实现一个简单分页器,提供各个数据列表展示使用.具体需求:1. 可展示“首页”和“尾页”.2. 可展示“上一页”和“下 ...
- 我心中的ASP.NET Core 新核心对象WebHost(二)
这是ASP.NET Core新核心对象系列的第二篇,上一篇 WebHost准备阶段 我们讲到了WebHostBuilder的初始化及配置.我们给WebHostBuilder进行以下配置 UseKest ...