题目描述:

给定一个n*n的矩阵,求该矩阵的k次幂,即P^k

思路

1. 和求解整数幂的思路相同, 使用分治策略, 代码的框架是

int pow(a, b) {

  c = pow(a, b/2)

  c*= c;

  if(b 为奇数)

    c *= a;

  return c

}

2. 这道题求的是矩阵, 上面的框架不太好用, 毕竟返回一个矩阵是有点不靠谱. 既然显式的返回矩阵不行, 那就玩个把戏, 隐式返回.

将矩阵设置为全局变量, 使得递归函数里对矩阵的操作全局有效, 就不需要显式返回矩阵了

3. 尝试仅使用两个矩阵得出结果, 但失败了, 计算矩阵乘法, 至少需要三个矩阵的空间吧

代码

#include <iostream>
#include <stdio.h>
using namespace std;int matrix1[12][12];
int matrix2[12][12];
int matrix3[12][12];int n, k;void multimatrix(int x) {if(x == 1)return;multimatrix(x/2);for(int i = 0; i < n; i ++) {for(int j = 0; j < n; j ++) {int grid = 0;for(int k = 0; k < n; k ++) {grid += matrix2[i][k]*matrix2[k][j];}matrix3[i][j] = grid;}}for(int i = 0; i < n; i ++) {for(int j = 0; j < n; j ++) {matrix2[i][j] = matrix3[i][j];}}if(x&1) {for(int i = 0; i < n; i ++) {for(int j = 0; j < n; j ++) {int grid = 0;for(int k = 0; k < n; k ++) {grid += matrix2[i][k]*matrix1[k][j];}matrix3[i][j] = grid;}}for(int i = 0; i < n; i ++) {for(int j = 0; j < n; j ++) {matrix2[i][j] = matrix3[i][j];}}}
}int main() {int t;scanf("%d", &t);for(int i = 0; i < t; i ++) {scanf("%d%d", &n, &k);for(int i = 0; i < n; i ++) {for(int j = 0; j < n; j ++) {scanf("%d", &matrix1[i][j]);matrix2[i][j] = matrix1[i][j];}}multimatrix(k);for(int i = 0; i < n; i ++) {printf("%d", matrix2[i][0]);for(int j = 1; j < n; j ++) {printf(" %d", matrix2[i][j]);}printf("\n");}}return 0;
}

转载于:https://www.cnblogs.com/xinsheng/p/3586815.html

九度 1474:矩阵幂(二分法)相关推荐

  1. 九度 1462:两船载物问题(01背包)

    题目描述: 给定n个物品的重量和两艘载重量分别为c1和c2的船,问能否用这两艘船装下所有的物品. 思路 1. 朴素背包问题 2. 有几个细节要好好把握 (1) 在读入物品重量时顺带统计物品的最大值和总 ...

  2. 质因数的个数 - 九度教程第54题

    质因数的个数 - 九度教程第54题 题目 时间限制:1 秒 内存限制:32 兆 特殊判题:否 题目描述: 求正整数 N(N>1)的质因数的个数. 相同的质因数需要重复计算.如 120=22235 ...

  3. POJ 2778 AC自己主动机+矩阵幂 不错的题

    http://poj.org/problem?id=2778 有空再又一次做下,对状态图的理解非常重要 题解: http://blog.csdn.net/morgan_xww/article/deta ...

  4. 九度 1408 寻找表达式 (中缀转后缀)

    题目描述 总结 1. '_' 运算符不是 a*10 + b, 而是 a*(10 or 100) + b 2. char * 与 string 的相互转化 char* = string.c_str() ...

  5. 剑指Offer - 九度1511 - 从尾到头打印链表

    剑指Offer - 九度1511 - 从尾到头打印链表2013-11-29 21:08 题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包含一组测试样例. 每一组测试案 ...

  6. 九度 1545:奇怪的连通图

    题目描述 总结 1. 用 BFS 实现 Dijkstra. 要点是, visited 后标记, 把某个点从优先队列取出后再标记 代码 未通过九度测试 RE /** source.cpp** Creat ...

  7. 九度题库(所有题目整理,适合计算机考研和面试的人用)

    本来搜一道面试题,找到叫九度题库的地方,发现里面的题目都比较基础,很适合当面试题来练习. 于是,闲得蛋疼,把所有题目给爬下来了,并整理成markdown格式,然后export成pdf,方便大家离线阅读 ...

  8. 【强烈推荐】程序猿们,九度Online Judge开始举办月赛啦!!会编程才是王道!!!!!

    程序猿们,九度Online Judge开始举办月赛啦!!会编程才是王道!! 在国内计算机考研中,已经有越来越多的高校采用ACM上机考试的形式,在复试中来考察考生的实际动手编程能力,并且机试在复试中所占 ...

  9. hdu 4291 矩阵幂 循环节

    http://acm.hdu.edu.cn/showproblem.php?pid=4291 凡是取模的都有循环节-----常数有,矩阵也有,并且矩阵的更奇妙: g(g(g(n))) mod 109  ...

最新文章

  1. UVa 11729 - Commando War(贪心算法)
  2. element-ui表格列金额显示两位小数
  3. mikrotik ros ***借线
  4. Widget创建过程(将RemoteViews发给WidgetHost)
  5. 安装pytorch步骤
  6. 字节约翰斯·霍普金斯上交提出iBOT框架,基于MIM进行自监督训练,在ImageNet-1K上达到86.3%的微调精度!...
  7. Python 只读属性的实现
  8. 图解HTTP知识框架
  9. 通向财务自由之路05_选择一个有效的理念
  10. 电力三维基础信息平台
  11. C++ 资源管理 —— RAII
  12. python生存曲线_Python从零开始第五章生物信息学⑤生存分析(log-rank)
  13. 解决matlab2019b中文乱码问题
  14. C# int与byte之间转换的方法
  15. 冒泡排序通俗易懂 图文详细操作
  16. win10系统计算机如何分盘,windows10怎么分盘
  17. 高仓健电影《海峡》观后感
  18. 南通大学《构建之法》课程助教总结
  19. 深度完美 XP SP3 完美优化DVD装机版 V2013
  20. 如何避免扫码枪重复扫码

热门文章

  1. word一键生成ppt 分页_如何一键把Word转换为PPT?
  2. msflexgrid允许大选择_选择复式楼、跃层和别墅的装修业主如何做好家里的楼梯...
  3. 计算机应用管理试题,学习管理系统中计算机应用试卷试题及答案.docx
  4. 中兴c600olt数据配置_中兴天机Axon 10 Pro再掀波澜,4G版3199元起,5G版还有悬念?...
  5. 光纤收发器的实际应用范围介绍
  6. 什么是3G-SDI光端机?
  7. [渝粤教育] 西南科技大学 管理信息系统 在线考试复习资料(1)
  8. 【渝粤教育】广东开放大学 个人与团队管理 形成性考核 (57)
  9. cad怎么将图层后置_CAD中如何将某1个图层置于其他图层之上.doc
  10. element手机验证格式_基于Vue+elementUI实现动态表单的校验功能(根据条件动态切换校验格式)...