2018.10.23 bzoj1297: [SCOI2009]迷路(矩阵快速幂优化dp)
传送门
矩阵快速幂优化dp简单题。
考虑状态转移方程:
f[time][u]=∑f[time−1][v]f[time][u]=\sum f[time-1][v]f[time][u]=∑f[time−1][v]
把一个点拆成9个来转换边长,然后根据题意模拟连边就行了。
最后用矩阵快速幂优化一下转移就能过啦。
代码:
#include<bits/stdc++.h>
using namespace std;
int n,t,m;
char s[50];
const int mod=2009;
struct Matrix{
int val[100][100];
Matrix(int x=0){
memset(val,0,sizeof(val));
for(int i=0;i<m;++i)val[i][i]=x;
}
inline Matrix operator*(const Matrix&b){
Matrix ret(0);
for(int i=0;i<m;++i)for(int k=0;k<m;++k)for(int j=0;j<m;++j)(ret.val[i][j]+=val[i][k]*b.val[k][j]%mod)%=mod;
return ret;
}
friend inline Matrix operator^(Matrix a,int p){Matrix ret(1);for(;p;p>>=1,a=a*a)if(p&1)ret=ret*a;return ret;}
};
#define idx(x,y) ((x)*9+(y))
int main(){
scanf("%d%d",&n,&t),m=n*9;
Matrix ans(0),a(0);
ans.val[0][0]=1;
for(int i=0;i<n;++i){
scanf("%s",s);
for(int j=0;j<n;++j){
int c=s[j]-'0';
if(!c)continue;
++a.val[idx(i,c-1)][idx(j,0)];
}
}
for(int i=0;i<n;++i)for(int j=0;j<8;++j)++a.val[idx(i,j)][idx(i,j+1)];
ans=ans*(a^t);
printf("%d",ans.val[0][idx(n-1,0)]);
return 0;
}
2018.10.23 bzoj1297: [SCOI2009]迷路(矩阵快速幂优化dp)的更多相关文章
- BZOJ1297: [SCOI2009]迷路 矩阵快速幂
Description windy在有向图中迷路了. 该有向图有 N 个节点,windy从节点 0 出发,他必须恰好在 T 时刻到达节点 N-1. 现在给出该有向图,你能告诉windy总共有多少种不同 ...
- 2018.10.19 NOIP训练 桌子(快速幂优化dp)
传送门 勉强算一道dp好题. 显然第kkk列和第k+nk+nk+n列放的棋子数是相同的. 因此只需要统计出前nnn列的选法数. 对于前mmm%nnn列,一共有(m−1)/n+1(m-1)/n+1(m− ...
- 2018.10.22 bzoj1009: [HNOI2008]GT考试(kmp+矩阵快速幂优化dp)
传送门 f[i][j]f[i][j]f[i][j]表示从状态"匹配了前i位"转移到"匹配了前j位"的方案数. 这个东西单次是可以通过跳kmp的fail数组得到的 ...
- 2018.10.16 uoj#340. 【清华集训2017】小 Y 和恐怖的奴隶主(矩阵快速幂优化dp)
传送门 一道不错的矩阵快速幂优化dpdpdp. 设f[i][j][k][l]f[i][j][k][l]f[i][j][k][l]表示前iii轮第iii轮还有jjj个一滴血的,kkk个两滴血的,lll个 ...
- 省选模拟赛 Problem 3. count (矩阵快速幂优化DP)
Discription DarrellDarrellDarrell 在思考一道计算题. 给你一个尺寸为 1×N1 × N1×N 的长条,你可以在上面切很多刀,要求竖直地切并且且完后每块的长度都是整数. ...
- 【bzoj1009】[HNOI2008]GT考试(矩阵快速幂优化dp+kmp)
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1009 这道题一看数据范围:$ n<=10^9 $,显然不是数学题就是矩乘快速幂优 ...
- BZOJ 1297: [SCOI2009]迷路 [矩阵快速幂]
Description windy在有向图中迷路了. 该有向图有 N 个节点,windy从节点 0 出发,他必须恰好在 T 时刻到达节点 N-1. 现在给出该有向图,你能告诉windy总共有多少种不同 ...
- 2018.10.19 NOIP模拟 硬币(矩阵快速幂优化dp)
传送门 不得不说神仙出题人DZYODZYODZYO出的题是真的妙. f[i][j][k]f[i][j][k]f[i][j][k]表示选的硬币最大面值为iii最小面值不小于jjj,总面值为kkk时的选法 ...
- Luogu P4159 [SCOI2009]迷路 矩阵快速幂+精巧转化
大致就是矩阵快速幂吧.. 这个时候会发现这些边权$\le 9$,然后瞬间想到上回一道题:是不是可以建一堆转移矩阵再建一个$lcm(1,2,3,4,5,6,7,8,9)$的矩阵?...后来发现十分的慢q ...
随机推荐
- java垃圾回收几种算法
1.引用计数法 2.标记——清除法 3.标记——整理算法 4.copying算法 5.generation算法(新生代.老年代.持久代) 详情参考:深入理解 Java 垃圾回收机制
- 前端-CSS-4-伪类选择器&伪元素选择器
1.伪类选择器(爱恨原则) -------------------------------------------------------------------------------------- ...
- hibernate的异常 Session was already closed
今天写hibernate时候遇到一些异常 代码: Session session = sessionFactory.getCurrentSession(); session.beginTransact ...
- debug-stripped.ap_' specified for property 'resourceFile' does not exist.(转载)
1.错误描述 更新Android Studio到2.0版本后,出现了编译失败的问题,我clean project然后重新编译还是出现抑郁的问题,问题具体描述如下所示: Error:A problem ...
- Spring ThreadPoolTaskExecutor
1. ThreadPoolTaskExecutor配置 1 <!-- spring thread pool executor --> 2 <bean id="taskExe ...
- EasyUI 导出页面到Excel中
<script type="text/javascript"> <!-- js --> /*================================ ...
- EasyUI 删除
<script type="text/javascript"> <!-- js --> /*================================ ...
- Python iter() 函数
Python iter() 函数 Python 内置函数 描述 iter() 函数用来生成迭代器. 语法 以下是 iter() 方法的语法: iter(object[, sentinel]) 参数 ...
- 自对齐(self-aligned)
C语言是自对齐的,32位以4字节对齐,64位以8字节对齐(1字节=8 bits) 自对齐的好处:在一条指令内完成数据的取或者存的操作,使得内存访问更快:否则,如果一个变量跨机器字存储,那么要做两次或更 ...
- 各种语言使用HTTP Request
1. JAVA String requestContent = "{"id":"1","sort":"des" ...