1122 机器人走方格 V4
输入1个数N(0 <= N <= 10^9)
输出走法的数量 Mod 10^9 + 7
1
9
思路:矩阵快速幂。
这道题和hdu2232是一样的只不过hud的那到题数据比较小,用dp能过,但这道题必须要矩阵快速幂。这道题的思路可以参考http://blog.csdn.net/womendeaiwoming/article/details/5806700
给出递推:
其中f下标表示第i个机器人在第j的方格的方案;
1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<stdlib.h>
5 #include<queue>
6 #include<string.h>
7 using namespace std;
8 typedef long long LL;
9 typedef struct node {
10 LL m[4][4];
11 node() {
12 memset(m,0,sizeof(m));
13 }
14 } maxtr;
15 void Init(maxtr *p);
16 maxtr quick(maxtr ans,LL m);
17 const LL mod = 1e9 + 7;
18 LL dp[4][4];
19 LL dpx[4][4];
20 int main(void) {
21 LL n;
22 scanf("%lld",&n);
23 if(n == 0) {
24 printf("1\n");
25 } else {
26 maxtr ac;
27 Init(&ac);
28 int i,j,z;
29 maxtr ak = quick(ac,n);
30 memset(dpx,0,sizeof(dpx));
31 for(i = 0; i < 4; i++) {
32 for(j = 0; j < 4; j++) {
33 for(z = 0; z < 4; z++) {
34 dpx[i][j] = dpx[i][j] + ak.m[i][z]*dp[z][j]%mod;
35 dpx[i][j]%=mod;
36 }
37 }
38 }
39 int x,y;
40 LL sum = 0;
41 for(i = 0; i < 4; i++) {
42 for(j = 0; j < 4; j++) {
43 for(x = 0; x < 4; x++) {
44 for(y = 0; y < 4; y++) {
45 if(i==j||i==x||i==y||j==x||j==y||x==y)
46 continue;
47 else {
48 sum = sum + (((dpx[0][i]*dpx[1][j]%mod)*dpx[2][x]%mod)*dpx[3][y])%mod;
49 sum %= mod;
50 }
51 }
52 }
53 }
54 }
55 printf("%lld\n",sum);
56 }
57 return 0;
58 }
59 maxtr E() {
60 int i,j;
61 maxtr ans;
62 for(i = 0 ; i < 4 ; i++) {
63 for(j = 0 ; j < 4 ; j++) {
64 if(i == j) {
65 ans.m[i][j] = 1;
66 }
67 }
68 }
69 return ans;
70 }
71 void Init(maxtr *p) {
72 int i,j;
73 for(i = 0; i < 4; i++) {
74 fill(p->m[i],p->m[i]+4,1);
75 }
76 p->m[0][2] = 0;
77 p->m[1][3] = 0;
78 p->m[2][0] = 0;
79 p->m[3][1] = 0;
80 memset(dp,0,sizeof(dp));
81 for(i = 0; i < 4; i++) {
82 for(j = 0; j < 4; j++) {
83 if(i == j)
84 dp[i][j] = 1;
85 }
86 }
87 }
88 maxtr quick(maxtr ans,LL m) {
89 int i,j,z;
90 maxtr ask = E();
91 while(m) {
92 if(m&1) {
93 maxtr C;
94 for(i = 0; i < 4; i++) {
95 for(j = 0 ; j < 4; j++) {
96 for(z = 0; z < 4; z++) {
97 C.m[i][j] = C.m[i][j] + ans.m[i][z]*ask.m[z][j]%mod;
98 C.m[i][j]%=mod;
99 }
100 }
101 }
102 ask = C;
103 }
104 maxtr ak;
105 for(i = 0 ; i < 4; i++) {
106 for(j = 0; j < 4; j++) {
107 for(z = 0 ; z < 4; z++) {
108 ak.m[i][j] = ak.m[i][j] + ans.m[i][z]*ans.m[z][j]%mod;
109 ak.m[i][j]%=mod;
110 }
111 }
112 }
113 ans = ak;
114 m>>=1;
115 }
116 return ask;
117 }
1122 机器人走方格 V4的更多相关文章
- 51nod 1122 机器人走方格 V4 【矩阵快速幂】
首先建立矩阵,给每个格子编号,然后在4*4的格子中把能一步走到的格子置为1,然后乘n次即可,这里要用到矩阵快速幂 #include<iostream> #include<cstdio ...
- 51nod 1122:机器人走方格 V4 (矩阵快速幂)
题目链接 昨天上随机信号分析讲马氏链的时候突然想到这题的解法,今天写一下 定义矩阵A,Ans=A^n,令A[i][j]表示,经过1次变换后,第i个位置上的机器人位于第j个位置的情况数,则Ans[i][ ...
- 51nod1122 机器人走方格 V4
矩阵快速幂求出每个点走n步后到某个点的方案数.然后暴力枚举即可 #include<cstdio> #include<cstring> #include<cctype> ...
- 51nod_1122:机器人走方格 V4 (矩阵快速幂)
题目链接 昨天上随机信号分析讲马氏链的时候突然想到这题的解法,今天写一下 定义矩阵A,Ans=A^n,令A[i][j]表示,经过1次变换后,第i个位置上的机器人位于第j个位置的情况数,则Ans[i][ ...
- 机器人走方格 V3
1120 . 机器人走方格 V3 基准时间限制:1 秒 空间限制:65536 KB 分值: 160 N * N的方格,从左上到右下画一条线.一个机器人从左上走到右下,只能向右或向下走.并要求只能在 ...
- 51nod1120 机器人走方格 V3
跟括号序列是一样的,将向右走看成是左括号向左走看成是右括号就可以了.那么就是卡特兰数了.然后由于n和m太大所以用了lucas定理 //跟括号序列是一样的,将向右走看成是左括号向左走看成是右括号就可以了 ...
- 51nod1119 机器人走方格 V2
终于学到了求组合数的正确姿势 //C(n+m-2,m-1) #include<cstdio> #include<cstring> #include<cctype> ...
- 51nod 1118 机器人走方格 解题思路:动态规划 & 1119 机器人走方格 V2 解题思路:根据杨辉三角转化问题为组合数和求逆元问题
51nod 1118 机器人走方格: 思路:这是一道简单题,很容易就看出用动态规划扫一遍就可以得到结果, 时间复杂度O(m*n).运算量1000*1000 = 1000000,很明显不会超时. 递推式 ...
- 1119 机器人走方格 V2(组合)
1119 机器人走方格 V2 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于 ...
随机推荐
- 21-Add Two Numbers-Leetcode
You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...
- Demo04分解质因数
package 习题集1;import java.util.Scanner;//将一个正整数分解质因数.例如输入90,打印出90=2*3*3*5public class Demo04 { public ...
- LInkedList总结及部分底层源码分析
LInkedList总结及部分底层源码分析 1. LinkedList的实现与继承关系 继承:AbstractSequentialList 抽象类 实现:List 接口 实现:Deque 接口 实现: ...
- 巩固javaweb第十二天
巩固内容: HTML 图像- 图像标签( <img>)和源属性(Src) 在 HTML 中,图像由<img> 标签定义. <img> 是空标签,意思是说,它只包含属 ...
- OpenStack——云平台部署
一.配置网络 准备:安装两台最小化的CentOS7.2的虚拟机,分别添加两张网卡,分别为仅主机模式和NAT模式,并且计算节点设置为4G运行内存,50G硬盘 1.控制节点--配置网络 控制节点第一个网卡 ...
- A Child's History of England.27
Then, the Red King went over to Normandy, where the people suffered greatly under the loose rule of ...
- day10 ajax的基本使用
day10 ajax的基本使用 今日内容 字段参数之choices(重要) 多对多的三种创建方式 MTV与MVC理论 ajax语法结构(固定的) 请求参数contentType ajax如何传文件及j ...
- hadoop/spark面试题
总结于网络 转自:https://www.cnblogs.com/jchubby/p/5449379.html 1.简答说一下hadoop的map-reduce编程模型 首先map task会从本地文 ...
- 案例 stm32单片机,adc的双通道+dma 内部温度
可以这样理解 先配置adc :有几个通道就配置几个通道. 然后配置dma,dma是针对adc的,而不是针对通道的. 一开始我以为一个adc通道对应一个dma通道.(这里是错的,其实是我想复杂了) 一个 ...
- Nginx 1.9.7.2 + PHP 5.6.18(FastCGI)在CentOS Linux下的编译安装
本文参考张宴的Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)[原创]完成.所有操作命令都在CentOS 6.x 64位操作系统下实践 ...
