当前位置: 首页 > wzjs >正文

吉林平安建设网站wordpress视频网站采集器

吉林平安建设网站,wordpress视频网站采集器,单机游戏大全,怎么做58网站吊车网信息学奥赛一本通(C版)在线评测系统 基础算法 第一节 动态规划的基本模型 1282:最大子矩阵 最大子矩阵问题讲解 1. 理解题意 同学们,想象我们有一张方格纸,上面每个方格里都写了一个数字,这就像一个数字矩…

信息学奥赛一本通(C++版)在线评测系统
基础算法 第一节 动态规划的基本模型
1282:最大子矩阵


最大子矩阵问题讲解

1. 理解题意

同学们,想象我们有一张方格纸,上面每个方格里都写了一个数字,这就像一个数字矩阵。我们要在这个数字矩阵里,找到一块小的方形区域(也就是子矩阵),这个小区域里所有数字加起来的和要比其他任何小区域的和都大。比如,给我们一个有好多数字的大矩阵,我们要把所有可能的小矩阵都找出来,算出它们各自的数字总和,然后挑出总和最大的那个小矩阵,最后输出这个最大的总和是多少。这就是我们要解决的问题哦。

2. 解题思路

我们有一个更聪明的办法来解决这个问题,就是先把矩阵里的数字做一些处理,算出每个位置到矩阵左上角的数字总和(这就是前缀和)。然后,我们通过确定子矩阵的上下边界和左右边界,利用之前算好的前缀和,快速算出这个子矩阵的数字总和。不用像之前那样每次都一个一个地去加子矩阵里的数字啦。最后,把所有算出来的子矩阵总和进行比较,找出最大的那个。

3. 解题步骤

  1. 输入矩阵:首先,我们要知道这个数字矩阵有多大,也就是输入矩阵的边长 n。然后把矩阵里每个方格的数字都一个一个地输入到我们的程序里。
  2. 计算前缀和:对于矩阵里的每个位置,算出从矩阵左上角到这个位置的所有数字的总和,把这个总和存起来。这样,我们就得到了一个前缀和矩阵。
  3. 枚举子矩阵边界:用循环来确定子矩阵的上下边界和左右边界。先确定上边界和下边界,对于每一对确定的上下边界,再去确定左右边界。
  4. 计算子矩阵和:当子矩阵的上下左右边界都确定后,利用前缀和矩阵,快速算出这个子矩阵的数字总和。
  5. 比较和找出最大:每算出一个子矩阵的和,就和之前找到的最大和比较一下。如果这个和比之前的最大和大,那就把这个和当成新的最大和。
  6. 输出结果:最后,把找到的最大和输出出来,这就是最大子矩阵的大小。

4. C++代码实现

#include <iostream> // 包含输入输出功能的头文件,能让我们输入矩阵数字和输出结果
using namespace std; int main() {int n; // 定义变量n,用来存矩阵的边长,也就是矩阵是几乘几的cin >> n; // 从键盘输入矩阵的边长nint a[101][101]; // 定义二维数组a,用来存矩阵里的数字,最多存101乘101的矩阵int s[101][101] = {0}; // 定义二维数组s存前缀和,初始都为0// 输入矩阵的数字并计算前缀和for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { cin >> a[i][j]; // 输入矩阵第i行第j列的数字// 计算前缀和,就是把左上角到当前位置的数字都加起来s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j]; }}int maxs = -128 * 100 * 100; // 定义变量maxs存最大和,初始设为一个很小的值// 枚举子矩阵的上边界i1和下边界i2for (int i1 = 1; i1 <= n; i1++) { for (int i2 = i1; i2 <= n; i2++) { // 对于每对上下边界,枚举子矩阵的左边界j1和右边界j2for (int j1 = 1; j1 <= n; j1++) { for (int j2 = j1; j2 <= n; j2++) { // 利用前缀和计算子矩阵的和int subs = s[i2][j2] - s[i1 - 1][j2] - s[i2][j1 - 1] + s[i1 - 1][j1 - 1]; if (subs > maxs) { // 如果当前子矩阵和大于最大和maxs = subs; // 更新最大和}}}}}cout << maxs << endl; // 输出最大子矩阵的和return 0; 
}

5. 知识点总结

  1. 二维数组:我们用了两个二维数组,a 数组存原始的矩阵数字,s 数组存前缀和。二维数组就像一个表格,有行和列,我们可以通过行和列的下标找到对应的数字。
  2. 前缀和:这是一个很有用的技巧,通过计算前缀和,我们可以快速算出子矩阵的和。前缀和就是从矩阵左上角到某个位置的所有数字的总和。
  3. 循环嵌套:在程序里,我们用了好几层循环。循环可以让我们重复做一些事情,循环嵌套就是一个循环里面还有另一个循环。这里我们用循环嵌套来枚举子矩阵的边界。
  4. 比较和赋值:我们用 if 语句来比较子矩阵的和与当前的最大和,如果子矩阵的和更大,就把它赋值给最大和。这让我们能找到最大的子矩阵和。

文章转载自:

http://gcULLiZX.qhmqL.cn
http://OpFVetZr.qhmqL.cn
http://XaYLxIDu.qhmqL.cn
http://rw84Q5Hx.qhmqL.cn
http://agomLl0F.qhmqL.cn
http://Fmxsnagc.qhmqL.cn
http://TFLQfetG.qhmqL.cn
http://rt2ZFJSA.qhmqL.cn
http://nc8nmoIl.qhmqL.cn
http://f2cCLS4J.qhmqL.cn
http://juRA0cmD.qhmqL.cn
http://N0FlMRVU.qhmqL.cn
http://EgKXU8mD.qhmqL.cn
http://T2EUCBDR.qhmqL.cn
http://zvT0XeDP.qhmqL.cn
http://CmIeuGsD.qhmqL.cn
http://tpEAN60y.qhmqL.cn
http://Zb99BLBt.qhmqL.cn
http://lQELVhyG.qhmqL.cn
http://c97EmcDh.qhmqL.cn
http://EeZZLOm1.qhmqL.cn
http://1MBgtqAI.qhmqL.cn
http://Bh0fS79O.qhmqL.cn
http://mmGVTwZY.qhmqL.cn
http://Uvq9POC3.qhmqL.cn
http://fAX7uNHP.qhmqL.cn
http://xoYeqCSY.qhmqL.cn
http://XXJqOUCG.qhmqL.cn
http://OXzk2YKd.qhmqL.cn
http://TwoXM2gd.qhmqL.cn
http://www.dtcms.com/wzjs/763301.html

相关文章:

  • 网站建设规划书实训报告齐鲁人才网泰安招聘
  • 模板网站怎么建设优化房屋租赁网站开发意义
  • 有什么网站可以自己做书员工之家app官网下载地址
  • 怎样做娱乐网站泰安东平县建设局网站
  • 电子商务网站建设与维护ppt微信公众平台运营
  • 北京网站优化策略什么网站可以做美食
  • 青海省住房与城乡建设厅网站网站诊断与检测
  • 网站建设创意广告wordpress实现论坛功能
  • 朝阳市网站制作公司装修风格
  • 北京建站软件ps怎么logo设计制作
  • 上海当地网站网站开发到发布
  • 怎么看网站的备案信息深圳网站设计优刻
  • 运用.net做网站自己电脑怎么做网页
  • 凡科网免费建站网站title标点改动 影响
  • 建设银行网站联系电话drupal 网站建设
  • 电子商务网站开发的内容北京建设工程招标网
  • php做网站如何北京王府井美食
  • 建设网站需要什么资质网站首页优化公司
  • 站长工具网站备案西宁市建设网站多少钱
  • 永州建设网站如何制作动漫小短片
  • 成都网站建设哪些公司好郑州搜索引擎优化
  • 成品网站源码免费上海史特做网站多少钱
  • 马鞍山网站seo做网站的时候用的什么框架
  • wordpress怎么实现社交seo关键词平台
  • 网站建设与维护心得网站运营适合什么样的人做
  • 5星做号宿水软件的网站纯前端网站怎么做rest
  • 成都网站建设 网络公司如何创建一个免费网站
  • 网站开发的热门博客定制营销型网站什么意思
  • 数字媒体应用 网站开发wordpress 设为首页
  • 大连高端模板建站asp网站优化访问速度