【poj3734】矩阵乘法求解
【题意】
给N个方块排成一列。现在要用红、蓝、绿、黄四种颜色的油漆给这些方块染色。求染成红色方块和染成绿色方块的个数同时为偶数的染色方案的个数,输出对10007取余后的答案。(1<=n<=10^9)。
【分析】
看到这题的题目的第一想法是什么呢?我也不知道,因为还没做就知道是一道用矩阵乘法完成递推的题目了嘛!!
之前对矩阵乘法的理解不是很好,不知道可以同时推很多个元素的,于是脑子就卡了~~不写那么多乱七八糟的想法了,直接写题解吧。
当我们准备准备染第i个方块的时候,前i-1个方块已经染好颜色了。对于我们的目标颜色红色和绿色,根据我们想要红绿同时为偶的想法,我们可以把前i-1个方块的染色分成3种情况:
1.红色和绿色同时为偶数的方案数
2.红色和绿色中一个偶数一个奇数的方案数
3.红色和绿色同时为奇数的方案数
我们记前3种情况的方案数为ai-1,bi-1,ci-1。
我们最后需要的是an,但是我们需要a,b,c进行递推。
根据以上想法,我们希望用ai-1,bi-1,ci-1推出ai,bi,ci。
那么,多一个格子染色方案有多少个,是很容易推出来的哦:
ai=2*ai-1+bi-1;
bi=2*ai-1+2*bi-1+2*ci-1;
ci=bi-1+2*c-1;
根据这个递推式,我们可以得到矩阵A:
2 | 1 | 0 |
2 | 2 | 2 |
0 | 1 | 2 |
矩阵B为i=0的时候a,b,c的值:
1 |
0 |
0 |
然后用同样的快速幂求矩阵乘法的方法求解。
代码如下:
- #include<cstdio>
- #include<cstdlib>
- #include<cstring>
- #define Mod 10007
- struct node
- {
- int v[][];
- int m,l;
- };
- node get_mul(node a,node b)
- {
- node c;
- c.m=a.m;c.l=b.l;
- for(int i=;i<=c.m;i++)
- for(int j=;j<=c.l;j++)
- {
- c.v[i][j]=;
- for(int k=;k<=a.l;k++)
- c.v[i][j]=(c.v[i][j]+a.v[i][k]*b.v[k][j])%Mod;
- }
- return c;
- }
- int main()
- {
- int T,n;
- scanf("%d",&T);
- while(T--)
- {
- scanf("%d",&n);
- node a,b,c;
- a.m=a.l=;a.v[][]=;a.v[][]=;a.v[][]=;
- a.v[][]=a.v[][]=a.v[][]=;
- a.v[][]=,a.v[][]=,a.v[][]=;
- b.m=,b.l=,b.v[][]=,b.v[][]=,b.v[][]=;
- c.m=c.l=;c.v[][]=c.v[][]=c.v[][]=;
- c.v[][]=c.v[][]=c.v[][]=c.v[][]=c.v[][]=c.v[][]=;
- while(n)
- {
- if(n&) c=get_mul(c,a);
- a=get_mul(a,a);
- n>>=;
- }
- c=get_mul(c,b);
- printf("%d\n",c.v[][]);
- }
- return ;
- }
poj3734
有人能教我如何漂亮地打表么?
2015-09-19 10:57:49
【poj3734】矩阵乘法求解的更多相关文章
- CH Round #30 摆花[矩阵乘法]
摆花 CH Round #30 - 清明欢乐赛 背景及描述 艺术馆门前将摆出许多花,一共有n个位置排成一排,每个位置可以摆花也可以不摆花.有些花如果摆在相邻的位置(隔着一个空的位置不算相邻),就不好看 ...
- 学习心得:《十个利用矩阵乘法解决的经典题目》from Matrix67
本文来自:http://www.matrix67.com/blog/archives/tag/poj大牛的博文学习学习 节选如下部分:矩阵乘法的两个重要性质:一,矩阵乘法不满足交换律:二,矩阵乘法满足 ...
- 【转】Matrix67:十个利用矩阵乘法解决的经典题目
好像目前还没有这方面题目的总结.这几天连续看到四个问这类题目的人,今天在这里简单写一下.这里我们不介绍其它有关矩阵的知识,只介绍矩阵乘法和相关性质. 不要以为数学中的矩阵也是黑色屏幕上不断变化的 ...
- 矩阵乘法code
VOJ1067 我们可以用上面的方法二分求出任何一个线性递推式的第n项,其对应矩阵的构造方法为:在右上角的(n-1)*(n-1)的小矩阵中的主对角线上填1,矩阵第n行填对应的系数,其它地方都填0.例如 ...
- 分治与递归-Starssen矩阵乘法
代码实现: /** * 矩阵乘法求解 * @author Administrator * */ public class Strassen { public static final int NUMB ...
- 第四章 分治策略 4.2 矩阵乘法的Strassen算法
package chap04_Divide_And_Conquer; import static org.junit.Assert.*; import java.util.Arrays; import ...
- 【模拟题(电子科大MaxKU)】解题报告【树形问题】【矩阵乘法】【快速幂】【数论】
目录: 1:一道简单题[树形问题](Bzoj 1827 奶牛大集会) 2:一道更简单题[矩阵乘法][快速幂] 3:最简单题[技巧] 话说这些题目的名字也是够了.... 题目: 1.一道简单题 时间1s ...
- 【poj3070】矩阵乘法求斐波那契数列
[题目描述] 我们知道斐波那契数列0 1 1 2 3 5 8 13…… 数列中的第i位为第i-1位和第i-2位的和(规定第0位为0,第一位为1). 求斐波那契数列中的第n位mod 10000的值. [ ...
- 矩阵乘法的MPI并行计算
1.问题描述 矩阵乘法问题描述如下: 给定矩阵A和B,其中A是m*p大小矩阵,B是p*n大小的矩阵.求C = A*B. 求解这个问题最简单的算法是遍历A的行和B的列,求得C的相应元素,时间复杂度O(m ...
随机推荐
- asp.net后台获取前台的样式和后台给前台设置样式
//获取到textbox1 的top值 Response.Write(textbox1.Style["top"]); //设置textbox1的style textbox1.Sty ...
- 安卓获取Assets目录下的资源
获取Assets目录下的资源 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 ! ...
- MVC小系列(二十一)【带扩展名的路由可能失效】
mvc3之后:如果路由带上扩展名,比如这样: public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRout ...
- Ajax返回数据类型
MVC中,如果从controller返回的不是一个html,而是一个文本,使用AJAX中如何获取? 后台代码: public ActionResult UploadPicture() { return ...
- 学习笔记_过滤器详细_2(过滤器JavaWeb三大组件之一)
过滤器详细 5 四种拦截方式 我们来做个测试,写一个过滤器,指定过滤的资源为b.jsp,然后我们在浏览器中直接访问b.jsp,你会发现过滤器执行了! 但是,当我们在a.jsp中request.getR ...
- Runtime 在IOS中的详细使用
因为之前写东西的时候,都在未知笔记中,所有大家没有看到过我的文章,今天就开始使用博客园来进行和大家沟通.好了,废话不那么多了,转入正题.下面我把runtime 给大家介绍一下. ### 一.runti ...
- iOS控件——UIView与UIImageView播放动画的实现方法
1.UIView //初始状态 [UIView animateWithDuration:(int) animations:^{ //最终状态 }completion:^(BOOL finished){ ...
- jdbc的封装
package com.wjf.helper; import java.io.FileInputStream; import java.io.FileOutputStream; import java ...
- 八卦某 G 的前端开发方式及流程
他山之石,可以攻玉. 话说本人从毕业到现在一直在某 B 公司工作,前些年折腾过不少开发方式和工具,但总觉得或许有更好的方案,所以很好奇其它公司内部是如何工作的,我曾经浏览过某 Y 公司内部无所不包 ...
- 安装flash 插件scaleform出现错误:Scaleform Launch Panel.Launcher.handleDataLoaderIOError(): Loading XML Failedscaleform
经排查发现是Scaleform Launcher.swf报的错 (C:\Users\Administrator\AppData\Local\Adobe\Flash CC\zh_CN\Configura ...