随笔分类 - DP--矩阵乘法优化DP
摘要:题目 P3977 [TJOI2015]棋盘 分析 以为是个神题,其实是出题人题目描述有毒。 状态压缩+矩阵乘法优化dp。 每一个棋子是处在中间一行的。。 于是就很容易了,直接状态压缩,然后矩阵乘法维护转移即可。 代码 #include <bits/stdc++.h> using namespace
阅读全文
摘要:题目 分析 首先容易写出方程是:\(dp[i]=dp[i-1]*10^{\lfloor lg(i) \rfloor+1}+i\) 。 然后我们发现这个$*10^{\lfloor lg(i) \rfloor+1}$并不好使用矩阵快速幂来优化。 但是这个值似乎很少,只在$[1,19]$有取值。 于是考虑
阅读全文
摘要:题目 分析 显然两问的解决办法不一样。 对于第一问,显然可以数位$dp$,然后直接做就没了。 对于第二问,我们可以挖掘性质,发现上面等式成立的条件就是这个数的每一个二进制位为1的位置都不相邻。 于是我们考虑根据二进制的每一位来dp,那么很容易发现 \(dp[i+1]=dp[i]+dp[i-1]\)
阅读全文
摘要:题目 分析 矩阵快速幂模板题。 注意的几个点: 优化常数。 还有记得矩阵的初始化需要memset(不知道为什么会wa) 代码 #include<bits/stdc++.h> using namespace std; //#define getchar()(p1==p2&&(p2=(p1=buf)+f
阅读全文
摘要:题意 分析 递推式直接给了,矩阵快速幂模板。 代码 无。
阅读全文
摘要:题意 分析 直接按题意模拟dp过程即可,然后使用矩阵快速幂优化。 代码 口胡的。
阅读全文
摘要:题目 分析 首先很明显是个 \(dp\),然后发现转移如果只有一维的话不好处理,于是开第二维表示当前状态来转移。 其实可以直接写成一个递推柿子: 然后就是矩阵快速幂了。 代码 口胡的,没有代码。
阅读全文
摘要:题意 题目链接 分析 DP部分 这题乍一看是个水题... 可以很快看出$DP$的做法 设$dp[i][j]$表示到了第$i$行第$j$列的方案数 那么$dp$转移方程很好写了: \[ dp[i][j]=dp[i-1][j]+dp[i-1][j]+dp[i-1][j+1]+dp[i-2][j] \]
阅读全文