[BZOJ 4417][Shoi2013]超级跳马
4417: [Shoi2013]超级跳马
Time Limit: 10 Sec Memory Limit: 256 MB
Submit: 379 Solved: 230
[Submit][Status][Discuss]Description
现有一个n行m列的棋盘,一只马欲从棋盘的左上角跳到右下角。每一步它向右跳奇数列,且跳到本行或相邻行。跳越期间,马不能离开棋盘。例如,当n = 3, m = 10时,下图是一种可行的跳法。试求跳法种数mod 30011。Input
仅有一行,包含两个正整数n, m,表示棋盘的规模。Output
仅有一行,包含一个整数,即跳法种数mod 30011。Sample Input
3 5Sample Output
10HINT
对于100%的数据,1 ≤ n ≤ 50,2 ≤ m ≤ 10^9
题解
首先我们发现由于某个点的状态可以从与它所在列的编号的奇偶性不同的所有列转移, 所以这应该是一个前缀和.
而第 $i$ 列的前缀和可以从前一列转移, 但奇数列与偶数列所转移的位置并不同, 所以转移过程中需要记录两个参考向量. 这样的话转移过程中的向量维数就是 $2n$ , 我们就需要一个 $2n\times 2n$ 的矩阵了. 我的转移矩阵大概长这样:

其中左上部分用于统计答案, 左下部分把奇偶性相同的列也加和起来, 右上部分用于把上一列答案下推一列.
然后最后一轮的时候要把左下和右上部分置零(其实主要是左下部分置零, 因为奇偶性相同的列不能再加入答案了)
A掉之后整个人都赛艇了2333333
参考代码
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm> const int MOD=; int n,m; struct Matrix{
int n;
int m[][];
Matrix(int n=){
this->n=n;
memset(m,,sizeof(m));
}
}; struct Vector{
int n;
int v[];
Vector(int n=){
this->n=n;
memset(v,,sizeof(v));
}
}; Vector operator* (const Vector& v,const Matrix& m){
Vector ans(v.n);
for(int i=;i<=v.n;i++)
for(int j=;j<=v.n;j++)
(ans.v[j]+=1ll*v.v[i]*m.m[i][j])%=MOD;
return ans;
} Matrix operator* (const Matrix& a,const Matrix& b){
Matrix ans(a.n);
for(int i=;i<=a.n;i++)
for(int j=;j<=a.n;j++)
for(int k=;k<=a.n;k++)
(ans.m[i][j]+=1ll*a.m[i][k]*b.m[k][j])%=MOD;
return ans;
} int main(){
scanf("%d%d",&n,&m);
Vector v(*n);
Matrix mx(*n);
v.v[]=;
for(int i=;i<=n;i++){
mx.m[i+n][i]=;
mx.m[i][i+n]=;
for(int j=std::max(,i-);j<=std::min(n,i+);j++){
mx.m[i][j]=;
}
}
m-=;
while(m>){
if((m&)!=){
v=v*mx;
}
mx=mx*mx;
m>>=;
}
memset(mx.m,,sizeof(mx.m));
for(int i=;i<=n;i++){
for(int j=std::max(,i-);j<=std::min(n,i+);j++){
mx.m[i][j]=;
}
}
if((m&)==)
v=v*mx;
printf("%d\n",v.v[n]);
return ;
}
Backup

[BZOJ 4417][Shoi2013]超级跳马的更多相关文章
- 洛谷 P3990 [SHOI2013]超级跳马 解题报告
P3990 [SHOI2013]超级跳马 题目描述 现有一个\(n\) 行 \(m\) 列的棋盘,一只马欲从棋盘的左上角跳到右下角.每一步它向右跳奇数列,且跳到本行或相邻行.跳越期间,马不能离开棋盘. ...
- [题解][SHOI2013]超级跳马 动态规划/递推式/矩阵快速幂优化
这道题... 让我见识了纪中的强大 这道题是来纪中第二天(7.2)做的,这么晚写题解是因为 我去学矩阵乘法啦啦啦啦啦对矩阵乘法一窍不通的童鞋戳链接啦 层层递推会TLE,正解矩阵快速幂 首先题意就是给你 ...
- BZOJ 4417 Luogu P3990 [SHOI2013]超级跳马 (DP、矩阵乘法)
题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=4417 (luogu)https://www.luogu.org/prob ...
- BZOJ4417: [Shoi2013]超级跳马
Description 现有一个n行m列的棋盘,一只马欲从棋盘的左上角跳到右下角.每一步它向右跳奇数列,且跳到本行或相邻行.跳越期间,马不能离开棋盘.例如,当n = 3, m = 10时,下图是一种可 ...
- 【BZOJ4417】: [Shoi2013]超级跳马
题目链接: 传送. 题解: 矩阵快速幂优化DP. 先考虑$nm^2$DP,设$f_{(i,j)}$表示从$1,1$到$i,j$的方案,显然这个方程和奇偶性有关,我们考虑某列的$i$同奇偶性的转移和奇偶 ...
- Luogu P3990 [SHOI2013]超级跳马
这道题还是一道比较不可做的矩阵题 首先我们先YY一个递推的算法:令f[i][j]表示走到第i行第j列时的方案数,那么有以下转移: f[i][j]=f[i-1][j-2*k+1]+f[i+1][j-2* ...
- 【bzoj4417】[Shoi2013]超级跳马 矩阵乘法
题目描述 现有一个n行m列的棋盘,一只马欲从棋盘的左上角跳到右下角.每一步它向右跳奇数列,且跳到本行或相邻行.跳越期间,马不能离开棋盘.例如,当n = 3, m = 10时,下图是一种可行的跳法. ...
- P3990 [SHOI2013]超级跳马
传送门 首先不难设\(f[i][j]\)表示跳到\((i,j)\)的方案数,那么不难得到如下转移 \[f[i][j]=\sum\limits_{k=1}^{\frac n2}f[i-2k+1][j-1 ...
- [SHOI2013]超级跳马
题目描述 现有一个n 行m 列的棋盘,一只马欲从棋盘的左上角跳到右下角.每一步它向右跳奇数列,且跳到本行或相邻行.跳越期间,马不能离开棋盘.试求跳法种数mod 30011. 输入输出格式 输入格式: ...
随机推荐
- freemarker写select组件(三)
freemarker写select组件 1.宏定义 <#macro select id datas value="" key="" text=" ...
- java.lang.IllegalStateException: Failed to load ApplicationContext
1.错误描述 七月 13, 2014 6:34:41 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBean ...
- ClassLoader原理
ClassLoader原理 JVM规范定义了两种类型的类装载器:启动内装载器 (bootstrap) 和用户自定义装载器 (user-defined class loader) . 一. Cla ...
- PageBase 公共基础类
PageBase 公共基础类 using System; using System.Collections.Generic; using System.Linq; using System.Web; ...
- 存储过程 100w提交
create or replace procedure largedata_insert(ip_table_name in varchar2, --目标表 ip_table_column in v ...
- es6的新特性--模板字符串
这几天简单看了一下深入浅出es6这本书,感觉特实用,学习了一个新特性---模板字符串在项目开发中,拼接字符串是不可缺少的,动态创建dom元素以及js操作数据都要拼接字符串,在es6出来之前,我们都通常 ...
- Car HDU - 5935
Problem Description Ruins is driving a car to participating in a programming contest. As on a very t ...
- 细说Ajax跨域
一.什么是跨域 跨域问题来自于浏览器同源策略的限制,包括DOM同源限制和Ajax同源限制,本文探讨的是Ajax跨域.Ajax跨域指的是一个页面的Ajax只能请求和当前页面同源的数据,如果发现请求到的数 ...
- hive数据库的哪些函数操作是否走MR
平时我们用的HIVE 我们都知道 select * from table_name 不走MR 直接走HTTP hive 0.10.0为了执行效率考虑,简单的查询,就是只是select,不带count, ...
- PHP/JAVA 杂谈 一(php 槽点)
[本文为个人意见,不喜就喷吧!] 最近,同事问到我,『那时候为什么从PHP转成Java?』,我想了很久,且撇开主观上的原因,当初业务重构使用java确实有很多可以说道的地方. 槽点1:哪有最好的语言, ...
