【JZOJ3294】【BZOJ4417】【luoguP3990】超级跳马
description
analysis
矩阵乘法好题
最朴素的\(10pts\)的\(f[i][j]\)容易\(DP\),但是是\(O(nm^2)\)的复杂度
于是把\(10\)分的\(DP\)写出来,就可以知道\(f[i][j]+=f[k][l]\)的部分可以搞前缀和优化,\(O(nm)\)有\(50pts\)
这个要先弄懂才可以继续搞矩乘
可以分成奇数列和偶数列分别\(DP\),设\(f[i],g[i]\)分别表示某奇数列的第\(i\)行和偶数列的第\(i\)行的方案数的前缀和
\(f[i]\)和\(g[i]\)都要加上第\(i\)行前面与他奇偶性相同的方案数方便转移,具体见代码
于是\(f[i]=g[i-1]+g[i]+g[i+1],g[i]=f[i-1]+f[i]+f[i+1]\)(注意边界的两个点),可以矩乘优化了
具体就是,初始矩阵写成前一半是\(f[1..n]\),后一半是\(g[1..n]\)
想办法矩乘转移到\((g[1..n],f’[1..n])\),这里举\(n=3\)的例子
\((1,0,0,1,1,0)*F=(1,1,0,3,2,1)\),因为打表发现\(\left(
\begin{matrix}
1,1,2...\\
0,1,2... \\
0,0,1...
\end{matrix}
\right)\),这个\(3\)加上了前面的那个\(1\)于是由\((f[i-1],f[i],f[i+1],g[i-1],g[i],g[i+1])*F=(g[i-1],g[i],g[i+1],f’[i-1],f’[i],f’[i+1])\)推矩阵
注意\(f[i]=g[i-1]+g[i]+g[i+1]\),推出来大概就是\(\left(
\begin{matrix}
0,0,0,1,0,0\\
0,0,0,0,1,0 \\
0,0,0,0,0,1\\
1,0,0,1,1,0\\
0,1,0,1,1,1\\
0,0,1,0,1,1\\
\end{matrix}
\right)\)\(n=10\)的矩阵长这样
- 于是就可以直接上矩乘搞了,答案就为最后两位的和
code
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define MAXN 55
#define mod 30011
#define ll long long
#define fo(i,a,b) for (ll i=a;i<=b;++i)
#define fd(i,a,b) for (ll ia=;i>=b;--i)
using namespace std;
ll n,m;
struct matrix
{
ll a[MAXN<<1][MAXN<<1],n,m;
matrix(){memset(a,0,sizeof(a)),n=m=0;}
matrix(ll x,ll y){memset(a,0,sizeof(a)),n=x,m=y;}
}f,ans,ans1,f1;
inline ll read()
{
ll x=0,f=1;char ch=getchar();
while (ch<'0' || '9'<ch){if (ch=='-')f=-1;ch=getchar();}
while ('0'<=ch && ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
inline matrix operator*(matrix a,matrix b)
{
matrix c(a.n,b.m);
fo(i,1,a.n)
fo(j,1,b.m)
fo(k,1,a.m)(c.a[i][j]+=a.a[i][k]*b.a[k][j])%=mod;
return c;
}
inline matrix pow(matrix x,ll y)
{
matrix z=x;
while (y)
{
if (y&1)z=z*x;
y>>=1,x=x*x;
}
return z;
}
int main()
{
n=read(),m=read();
ans=ans1=matrix(1,n<<1),f=f1=matrix(n<<1,n<<1);
ans.a[1][1]=ans.a[1][n+1]=ans.a[1][n+2]=f.a[n+1][n+1]=1;
fo(i,n+2,n<<1)f.a[i][i]=f.a[i-1][i]=f.a[i][i-1]=1;
fo(i,1,n)f.a[i][n+i]=f.a[n+i][i]=1;
f1=pow(f,m-3),ans1=ans*f1;
printf("%lld\n",(ans1.a[1][n-1]+ans1.a[1][n])%mod);
return 0;
}
【JZOJ3294】【BZOJ4417】【luoguP3990】超级跳马的更多相关文章
- BZOJ4417: [Shoi2013]超级跳马
Description 现有一个n行m列的棋盘,一只马欲从棋盘的左上角跳到右下角.每一步它向右跳奇数列,且跳到本行或相邻行.跳越期间,马不能离开棋盘.例如,当n = 3, m = 10时,下图是一种可 ...
- [BZOJ 4417][Shoi2013]超级跳马
4417: [Shoi2013]超级跳马 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 379 Solved: 230[Submit][Status ...
- 洛谷 P3990 [SHOI2013]超级跳马 解题报告
P3990 [SHOI2013]超级跳马 题目描述 现有一个\(n\) 行 \(m\) 列的棋盘,一只马欲从棋盘的左上角跳到右下角.每一步它向右跳奇数列,且跳到本行或相邻行.跳越期间,马不能离开棋盘. ...
- [题解][SHOI2013]超级跳马 动态规划/递推式/矩阵快速幂优化
这道题... 让我见识了纪中的强大 这道题是来纪中第二天(7.2)做的,这么晚写题解是因为 我去学矩阵乘法啦啦啦啦啦对矩阵乘法一窍不通的童鞋戳链接啦 层层递推会TLE,正解矩阵快速幂 首先题意就是给你 ...
- 【BZOJ4417】: [Shoi2013]超级跳马
题目链接: 传送. 题解: 矩阵快速幂优化DP. 先考虑$nm^2$DP,设$f_{(i,j)}$表示从$1,1$到$i,j$的方案,显然这个方程和奇偶性有关,我们考虑某列的$i$同奇偶性的转移和奇偶 ...
- 【bzoj4417】[Shoi2013]超级跳马 矩阵乘法
题目描述 现有一个n行m列的棋盘,一只马欲从棋盘的左上角跳到右下角.每一步它向右跳奇数列,且跳到本行或相邻行.跳越期间,马不能离开棋盘.例如,当n = 3, m = 10时,下图是一种可行的跳法. ...
- [bzoj4417] [洛谷P3990] [Shoi2013] 超级跳马
Description 现有一个n行m列的棋盘,一只马欲从棋盘的左上角跳到右下角.每一步它向右跳奇数列,且跳到本行或相邻行.跳越期间,马不能离开棋盘.例如,当n = 3, m = 10时,下图是一种可 ...
- Luogu P3990 [SHOI2013]超级跳马
这道题还是一道比较不可做的矩阵题 首先我们先YY一个递推的算法:令f[i][j]表示走到第i行第j列时的方案数,那么有以下转移: f[i][j]=f[i-1][j-2*k+1]+f[i+1][j-2* ...
- P3990 [SHOI2013]超级跳马
传送门 首先不难设\(f[i][j]\)表示跳到\((i,j)\)的方案数,那么不难得到如下转移 \[f[i][j]=\sum\limits_{k=1}^{\frac n2}f[i-2k+1][j-1 ...
随机推荐
- Qt【Could not parse stylesheet of object 0x7f7990 】
查找自己所写的 setstylesheet(); 然后看里面的括号标点什么的有没有多余的,删除即可解决.
- xshell本地上传文件到Ubuntu上及从Ubuntu上下载文件到本地
1.第一种方法是最常用的 :如果下载了Xshell和Xftp,Ctrl+Alt+F就可以选择文件的互传了!(虚拟机/云服务器通用)--只要相互间能ping得通. 2.第二种方法 :ubuntu环境下安 ...
- 【leetcode】538. Convert BST to Greater Tree
题目如下: Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the orig ...
- java中EL表达式怎么获取网站的根目录
${pageContext.request.contextPath} <a href="${pageContext.request.contextPath}/login.jsp&quo ...
- BZOJ 3998: [TJOI2015]弦论(后缀自动机)
传送门 解题思路 \(T=0\)时就和SP7258一样,\(T=1\)时其实也差不多,只不过要把每个点原来是\(1\)的权值改为\(Right\)集合的大小. 代码 #include<iostr ...
- CSS3 图形变换
1.zoom 和 transform:scale 的区别 : http://www.zhangxinxu.com/wordpress/2015/11/zoom-transform-sc ...
- 天照(amaterasu)
天照(amaterasu) 有些时候,出题人真的不想写背景. 总而言之,天照现在有一个长度为 $ N $ 序列,她有 $ M $ 次询问,对于第 $ i $ 次询问 $ l_i,r_i,x_i $ 你 ...
- ASP.NET Core学习——前言
跌跌撞撞,公司的新项目终于要在这个月月底上线. 新项目使用ASP.NET Core来做,以前没接触过这方面的内容,只能一边学习,一边搞开发. 眼看项目上线在即,工作没那么忙,也不需要天天加班. 回想了 ...
- tensorflow 训练网络loss突然出现nan的情况
1.问题描述:开始训练一切都是那么的平静,很正常! 突然loss变为nan,瞬间懵逼! 2.在网上看了一些解答,可能是梯度爆炸,可能是有关于0的计算.然后我觉得可能是关于0的吧,然后进行了验证. 3. ...
- 021_IO流
IO流 I——input 输入 O——Output 输出 文件 File 所有文件类的父类 创建方式 File file = new File("文件路径"); 文件对象常用的方法 ...