2012年4月26日
摘要: HDU_3658 可以用f[i][j]表示第i个字符为j时满足要求(有至少一对相邻的字符的ASC码值之差是32)的合法(任意一对相邻的字符的ASC码值之差都不超过32)字符串个数,g[i][j]表示第i个字符为j时不满足要求但合法的字符串个数。找到递推关系之后构造矩阵并用二分矩阵的方法求解即可。#include<stdio.h>#include<string.h>#define MAXD 110#define D 1000000007int N;struct Matrix{ int a[MAXD][MAXD]; Matrix() { memset(a, 0, s... 阅读全文
posted @ 2012-04-26 22:31 Staginner 阅读(260) 评论(0) 推荐(0) 编辑
摘要: HDU_2971 这个题目和HDU_3306的原理是一样的,具体的一些思路可以参考我的HDU_3306的解题报告:http://www.cnblogs.com/staginner/archive/2012/04/26/2471507.html。 只不过这个题目中递推关系的矩阵中有负的元素,为了后面运算起来方便,我们可以先将其通过模运算转化成正数。#include<stdio.h>#include<string.h>#define MAXD 4int N, M, a2;struct Matrix{ int a[MAXD][MAXD]; Matrix() { m... 阅读全文
posted @ 2012-04-26 16:21 Staginner 阅读(378) 评论(0) 推荐(0) 编辑
摘要: HDU_3306 由于N很大,所以需要在找出递推关系的基础上用二分矩阵来优化计算过程。 根据S(n)=S(n-1)+A(n)^2,A(n)^2=X^2*A(n-1)^2+Y^2*A(n-2)^2+2*X*Y*A(n-1)*A(n-2),A(n)*A(n-1)=Y*A(n-1)*A(n-2)+X*A(n-1)^2,可以构造如下的矩阵,然后用二分矩阵的方法求解即可。 #include<stdio.h>#include<string.h>#define D 10007#define MAXD 4int N, X, Y;struct Matrix{ int a[MAXD][MA 阅读全文
posted @ 2012-04-26 15:36 Staginner 阅读(615) 评论(0) 推荐(0) 编辑
摘要: HDU_1588 不妨设F为像下图一样的含有fibonacci项的矩阵,那么最后结果就是矩阵S(n-1)=F^(b)+F^(k+b)+…+F^(k*(n-1)+b)左上角的元素。 对于矩阵S和F,可以得到递推公式S(n)=S(n-1)+F^(k*n+b),F^(k*(n+1)+b)=A^(k)*F^(k*n+b),矩阵A为下图所示的矩阵。于是我们就可以将这个两个递推式构造成一个递推关系的矩阵,然后再用二分矩阵的方法快速求得S(n-1)即可。 #include<stdio.h>#include<string.h>#define MAXD 8int K, B, N, M;s 阅读全文
posted @ 2012-04-26 13:43 Staginner 阅读(263) 评论(0) 推荐(0) 编辑
摘要: FZU_1683 利用递推关系可以构造出下图所示的矩阵,然后用二分矩阵求解就可以了。 由于递推关系的矩阵是固定了,所以不妨先把二分矩阵中用到的递推关系的矩阵的2^x(0<=x<32)次幂预处理出来,这样可以节省一些时间。 #include<stdio.h>#include<string.h>#define MAXD 4#define D 2009int N;struct Matrix{ int a[MAXD][MAXD]; Matrix() { memset(a, 0, sizeof(a)); } void init() { ... 阅读全文
posted @ 2012-04-26 11:41 Staginner 阅读(306) 评论(0) 推荐(0) 编辑
摘要: FZU_1692 首先感觉输入数据里面的L和R应该反过来读取即先读入R再读入L,要不然样例算不出来,不知道是不是我理解错题意了。 矩阵不难构造,但这个题让进一步注意到了矩阵运算中的常熟优化: ①由于递推关系的矩阵各行是循环同构的,而两个这样的循环同构的矩阵的乘积依然是循环同构的,所以在用二分矩阵的方法计算的时候,可以先用O(N^2)的时间计算出第一行,再用O(N^2)的时间平移出下面各行的结果,这样每次做乘法的复杂度就由O(N^3)减少到了O(N^2)。 ②矩阵乘法的multiply的函数最好使用引用传递传参,如果直接传参的话每次相当于把矩阵复制一遍,这样效率就比较低了。#include< 阅读全文
posted @ 2012-04-26 10:44 Staginner 阅读(241) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示