九度 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360086.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我的Dojo中有一个Mojo(如何编写Maven插件)

我一直忙于在工作中使用Maven的腋窝。 对于很多开发人员&#xff0c;我会听到&#xff1a;“那又怎样。” 不同之处在于&#xff0c;我通常在无法直接访问Internet的环境中工作。 因此&#xff0c;当我说我经常使用Maven时&#xff0c;这意味着某些事情。 依赖地狱 公平地说&a…

linux安装程序过程,linux 应用程序安装过程

四.GRUB安装方式:(1)tar zxvf grub-0.5.96.1.tar.gz(2)cd grub-0.5.96.1(3)./configure(4)make(5)make check(6)make install(7)cp r /usr/local/share/grub/i386-pc/ /boot/grub/(8)vi /boot/menu.lst (内容参考grub-0.5.96.1/docs/menu.lst)例参考如:## /boot/grub/menu.lst …

在linux下安装mongo数据库,Linux系统下安装MongoDB

MongoDB提供了Linux系统上32位和64位的安装包&#xff0c;你可以在官网下载安装包。下载完安装包&#xff0c;并解压 tgz(以下演示的是 64 位 Linux上的安装) 。curl-O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz # 下载tar-zxvf mongodb-linux-x86_64-…

Neo4j:使用Cypher生成实时建议

Neo4j的最常见用途之一是构建实时推荐引擎&#xff0c;一个共同的主题是它们利用大量不同的数据来提出有趣的推荐。 例如&#xff0c; 在此视频中&#xff0c; 阿曼达&#xff08;Amanda&#xff09;展示了约会网站如何通过社交联系开始&#xff0c;然后介绍热情&#xff0c;位…

Windows 8.1 新增控件之 Hyperlink

Windows 8.1 新增控件之 Hyperlink 原文:Windows 8.1 新增控件之 HyperlinkHyperlink 控件应该不用过多介绍大家肯定十分清楚其作用&#xff0c;它的功能就像HTML中的<a href””>标签一样&#xff0c;只不过是在XAML中实现。 使用Hyperlink 标记的文字在应用中会以特殊颜…

Linux的slab和nginx的区别,Nginx核心知识100讲》nginx Slab管理器

极客专栏《Nginx核心知识100讲》38小节的笔记nginx 不同的worker之间需要共享信息的时候&#xff0c;只能通过共享内存。共享内存会使用链表&#xff0c;红黑树这样的数据结构。但是每个红黑树上有很多节点&#xff0c;每个节点上都需要分配内存去存放。怎样把一整块共享内存切…

睡觉时:新增的Java 8新增功能

自Java 8推出以来&#xff0c;最有趣的功能是什么&#xff1f; Java 8最近庆祝了它的第一个生日&#xff0c;而主要版本刚刚一年多前发布。 这当然值得庆祝。 自从最初的Java 8版本问世以来&#xff0c;已经发布了六个更新。 这些更新中的一些元素是次要的&#xff0c;但是如…

Gridview中实现求和统计功能

GridView加入自动求和求平均值小计效果图&#xff1a;解决方案&#xff1a; private double sum 0; //取指定列的数据和&#xff0c;你要根据具体情况对待可能你要处理的是int protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e){if (e.Row.R…

树莓派安装win10arm linux,在树莓派3B 上安装 Windows 10 ARM 版的方法

早先关注我们的朋友可能对《国外开发者尝试在树莓派3上运行Windows 10桌面版》有印象。本文转自 amatfan.com&#xff0c;文末视频来自 daveb778(感谢柠栀和刺分享)&#xff0c;给出了如何在树莓派3B上安装Windows10 ARM版&#xff0c;是的&#xff0c;这次并非IoT版&#xff0…

MVC中跳转到其他页面,并传参数

return RedirectToAction("MemberManager", "Shop", new { id Session["shopid"] }); MemberManager&#xff1a;页面的Action&#xff1b;Shop&#xff1a;Controller名称&#xff1b;id&#xff1a;要传的参数名&#xff1b;Session["…

ld-linux.so.2 重定向,Linux Shell脚本Ldd命令原理及使用方法

1、首先ldd不是一个可执行程序&#xff0c;而只是一个shell脚本2、ldd能够显示可执行模块的dependency&#xff0c;其原理是通过设置一系列的环境变量如下&#xff1a;LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、 LD_VERBOSE等。当LD_TRACE_LOADED_O…

各种触摸手势

轻按(UITapGestureRecognizer) -- 用一个或多个手指在屏幕上轻按。 按住(UILongPressGestureRecognizer) -- 用一个或多个手指在屏幕上按住。 轻扫(UISwipeGestureRecognizer) -- 用一个或多个手指沿特定方向轻扫。 张合(UIPinchGestureRecognizer) -- 张合手指以缩放对象。 旋…

宝塔linux取消登录,宝塔面板如何关闭安全入口

通过 SSH 终端关闭安全入口通过 SSH 终端连接rm -f /www/server/panel/data/admin_path.pl即可关闭宝塔 Linux 面板的安全入口&#xff0c;关闭之后的面板登录地址就是&#xff1a;http://服务器 IP:8888。不过关闭这个安全入口之后很难恢复&#xff0c;所以不建议关闭宝塔面板…

一种通过变量插值读取属性的方法

最近&#xff0c;我尝试在应用程序服务器中定义和读取全局属性。 在应用程序服务器中配置的此类属性的好处–可以在此服务器上部署的所有Web应用程序之间共享该属性。 每个部署的应用程序都可以读取同一属性&#xff0c;该属性仅在一个位置配置一次。 我试图做的是在值部分中包…

[ofbiz]设置任务计划(job),提示service_item已经传递

问题描述&#xff1a;设置任务计划(job)&#xff0c;提示service_item已经传递 解决办法&#xff1a; 红色框内不要填写&#xff0c;就可以了。"已经传递"是翻译的不准确&#xff0c;应该是"已过时"&#xff0c;所以不设置开始时间&#xff0c;或者开始时间…

c r语言中rank函数,R语言的常用函数

基本一、数据管理vector&#xff1a;向量 numeric&#xff1a;数值型向量 logical&#xff1a;逻辑型向量character&#xff1b;字符型向量 list&#xff1a;列表 data.frame&#xff1a;数据框c&#xff1a;连接为向量或列表 length&#xff1a;求长度 subset&#xff1a;求子…

mongodb查询内嵌文档

mongodb查询内嵌文档假设有这样一个文档&#xff1a;db.XXX.remove();db.XXX.insert({"id":1, "members":[{"name":"BuleRiver1", "age":27, "gender":"M"}, {"name":"BuleRiver2"…

问号在c语言中运算符,C# 运算符 ?、??、?: 各种问号的用法和说明

1、可空类型修饰符(?)&#xff1a;引用类型可以使用空引用表示一个不存在的值&#xff0c;而值类型通常不能表示为空&#xff0c;例如:string strnull;是正确的。int inull&#xff1b;编译器将报错。为了使值类型也可为空&#xff0c;可空类型出现了&#xff0c;可空类型使用…

Extjs不错的博客

http://www.cnblogs.com/fangsui/category/372751.html http://www.cnblogs.com/WangJinYang/tag/EXT.NET/ http://www.cnblogs.com/codelove/tag/Ext.NET/转载于:https://www.cnblogs.com/anbylau2130/p/3598429.html

cvi中c语言只保留两位小数,CVI编程常见问题与错误-2012.9

CVI编程常见问题或错误1.CVI编程时&#xff0c;在程序中插入函数的方法&#xff1f;如何了解该函数隶属那个函数库&#xff1f; (3)2.如何查看或者找到一个CVI或IMAQ Vision的函数&#xff1f; (4)3.实验一不能显示曲线—采用了错误的显示控件 (5)4.实验一不能显示正弦曲线 (5)…