九度 1474:矩阵幂(二分法)
题目描述:
给定一个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:矩阵幂(二分法)相关推荐
- 九度 1462:两船载物问题(01背包)
题目描述: 给定n个物品的重量和两艘载重量分别为c1和c2的船,问能否用这两艘船装下所有的物品. 思路 1. 朴素背包问题 2. 有几个细节要好好把握 (1) 在读入物品重量时顺带统计物品的最大值和总 ...
- 质因数的个数 - 九度教程第54题
质因数的个数 - 九度教程第54题 题目 时间限制:1 秒 内存限制:32 兆 特殊判题:否 题目描述: 求正整数 N(N>1)的质因数的个数. 相同的质因数需要重复计算.如 120=22235 ...
- POJ 2778 AC自己主动机+矩阵幂 不错的题
http://poj.org/problem?id=2778 有空再又一次做下,对状态图的理解非常重要 题解: http://blog.csdn.net/morgan_xww/article/deta ...
- 九度 1408 寻找表达式 (中缀转后缀)
题目描述 总结 1. '_' 运算符不是 a*10 + b, 而是 a*(10 or 100) + b 2. char * 与 string 的相互转化 char* = string.c_str() ...
- 剑指Offer - 九度1511 - 从尾到头打印链表
剑指Offer - 九度1511 - 从尾到头打印链表2013-11-29 21:08 题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包含一组测试样例. 每一组测试案 ...
- 九度 1545:奇怪的连通图
题目描述 总结 1. 用 BFS 实现 Dijkstra. 要点是, visited 后标记, 把某个点从优先队列取出后再标记 代码 未通过九度测试 RE /** source.cpp** Creat ...
- 九度题库(所有题目整理,适合计算机考研和面试的人用)
本来搜一道面试题,找到叫九度题库的地方,发现里面的题目都比较基础,很适合当面试题来练习. 于是,闲得蛋疼,把所有题目给爬下来了,并整理成markdown格式,然后export成pdf,方便大家离线阅读 ...
- 【强烈推荐】程序猿们,九度Online Judge开始举办月赛啦!!会编程才是王道!!!!!
程序猿们,九度Online Judge开始举办月赛啦!!会编程才是王道!! 在国内计算机考研中,已经有越来越多的高校采用ACM上机考试的形式,在复试中来考察考生的实际动手编程能力,并且机试在复试中所占 ...
- hdu 4291 矩阵幂 循环节
http://acm.hdu.edu.cn/showproblem.php?pid=4291 凡是取模的都有循环节-----常数有,矩阵也有,并且矩阵的更奇妙: g(g(g(n))) mod 109 ...
最新文章
- UVa 11729 - Commando War(贪心算法)
- element-ui表格列金额显示两位小数
- mikrotik ros ***借线
- Widget创建过程(将RemoteViews发给WidgetHost)
- 安装pytorch步骤
- 字节约翰斯·霍普金斯上交提出iBOT框架,基于MIM进行自监督训练,在ImageNet-1K上达到86.3%的微调精度!...
- Python 只读属性的实现
- 图解HTTP知识框架
- 通向财务自由之路05_选择一个有效的理念
- 电力三维基础信息平台
- C++ 资源管理 —— RAII
- python生存曲线_Python从零开始第五章生物信息学⑤生存分析(log-rank)
- 解决matlab2019b中文乱码问题
- C# int与byte之间转换的方法
- 冒泡排序通俗易懂 图文详细操作
- win10系统计算机如何分盘,windows10怎么分盘
- 高仓健电影《海峡》观后感
- 南通大学《构建之法》课程助教总结
- 深度完美 XP SP3 完美优化DVD装机版 V2013
- 如何避免扫码枪重复扫码
热门文章
- word一键生成ppt 分页_如何一键把Word转换为PPT?
- msflexgrid允许大选择_选择复式楼、跃层和别墅的装修业主如何做好家里的楼梯...
- 计算机应用管理试题,学习管理系统中计算机应用试卷试题及答案.docx
- 中兴c600olt数据配置_中兴天机Axon 10 Pro再掀波澜,4G版3199元起,5G版还有悬念?...
- 光纤收发器的实际应用范围介绍
- 什么是3G-SDI光端机?
- [渝粤教育] 西南科技大学 管理信息系统 在线考试复习资料(1)
- 【渝粤教育】广东开放大学 个人与团队管理 形成性考核 (57)
- cad怎么将图层后置_CAD中如何将某1个图层置于其他图层之上.doc
- element手机验证格式_基于Vue+elementUI实现动态表单的校验功能(根据条件动态切换校验格式)...