DP 矩阵快速幂 Okabe and El Psy Kongroo:CodeForces

来源:互联网 发布:电脑怎么修改淘宝评价 编辑:程序博客网 时间:2024/06/05 05:44

题目:

Okabe and El Psy Kongroo:CodeForces - 821E

题意:

二维平面上,okabe需要从(0,0)到达(k,0)。当处于(x,y)坐标时,下一步只能到达(x+1,y-1),(x+1,y),(x+1,y+1)。
给出n条平行于y轴的线段,第i条线段从x1=ai,x2=bi,y=ci,保证ai=bi1。第i条线段,强制okabe只能行走在y<=ci的坐标当他位于ai<=x<=bi时。问总共有多少种合法的方案到达(k,0)?

数据范围:

1 ≤ n ≤ 100, 1 ≤ k ≤ 10^18
0 ≤ ai < bi ≤ 10^18, 0 ≤ ci ≤ 15

思路:

很快就能想到一个动归方程

f[x][y] = f[x-1][y-1]+f[x-1][y]+f[x-1][y+1]

但是这里k非常的大,直接DP肯定会超时。这时候就要用矩阵乘法,加快运算了。
一开始,我直接在想二维的矩阵乘法怎么构造,想了老半天都想不出来。后来才开始尝试一维,因为f[x]只和f[x-1]相关。
一维怎么构造呢?
令f[y]=f[x][y],因为上面的方程没有常数项,所以大致可以得到矩阵A=[ f[0],f[2],...,f[ci] ]。由于A*B=C,由于之前构造矩阵构造不出来的经验,我觉得直接构造B是比较困难的,于是先去考虑C应该长什么样子。
首先,我们肯定不需要C中出现f[ci+1],f[1],Bf[0]f[ci]CAC[ f[0],f[2],...,f[ci] ]。而且这里的f[0]=f[x+1][0]否则没有意义。
A、C矩阵都有了,我们就可以开始构造B了。这个时候构造就比较简单了,B中(i,j)的值,当(x,i)能到达(x+1,j)时为1,否则为0。大概长这样:

B=11000000...011100000...001110000...000111000...0..............................000000...111000000...011

阅读全文
0 0
原创粉丝点击