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 ...
随机推荐
- EZOJ #385 排列
分析 对于第一问我们直接从上到下枚举所有横边 每一次交换两边的列标号即可 对于第二问我们发现答案就是最终序列的逆序对数量 代码 #include<bits/stdc++.h> using ...
- ruby类对象和对象
class Box def initialize(w,h) @width,@height=w,h end def getArea puts "class of self #{self.cla ...
- RSA - 原理、特点(加解密及签名验签)及公钥和私钥的生成
Wiki - RSA加密演算法 Wiki - 欧拉函数 Wiki - 模反元素 ASN.1 格式标准 RSA算法原理(二) 注意: RSA 加密或签名后的结果是不可读的二进制,使用时经常会转为 BAS ...
- Nginx 模块 - ngx_http_rewrite_module
原文地址 ngx_http_rewrite_module 模块用于通过 PCRE 正则表达式改变请求 URI,返回重定向并可以有条件地选择配置. break.if.return.rewrite 以及 ...
- Postman 测试Xfire webservice
权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/u013177381/article/det ...
- 边界安全 - CDN/DMZ/网络协议
CDN 工具 - LuManager CDN DMZ 网络协议 - DNS Win7下搭建DNS服务器 - BIND 根域 顶级域(即相关国家域名管理机构的数据库,如中国的CNNIC) com n ...
- Notepad++正则表达式合并多行代码为1行
有时候你想要缩减代码行数,多行并1行,像网页流行的JS代码,查看时多见这种情况,但是有时你想把多行switch case缩成1行,再手动分开,每个case一行. 这种对齐方式似乎在日式程序员的代码中经 ...
- 获取jQuery DataTables 的checked选中行
$(function () { var tabel = $('#userlist').DataTable({ destroy: true, //Cannot reinitialise ...
- Django first()和last() F查询以及Q查询
一.first()和last() 分别返回queryset的第一项与最后一项,具体用法如下: p = Blog.objects.order_by('title').first() 等同于: try: ...
- Go错误处理机制及自定义错误
错误处理机制: 先看一段代码:看看输出什么? package mainimport "fmt" func test() { num1 := 10 num2 := 0 res := ...