【NOIP提高组】方格取数

【NOIP提高组】方格取数


💖The Begin💖点点关注,收藏不迷路💖

设有N*N的方格图,我们将其中的某些方格填入正整数, 而其他的方格中放入0。 某人从图得左上角出发,可以向下走,也可以向右走,直到到达右下角。 在走过的路上,他取走了方格中的数。(取走后方格中数字变为0) 此人从左上角到右下角共走3次,试找出3条路径,使得取得的数总和最大。

输入:

第一行:N (4< =N< =20) 接下来一个N*N的矩阵,矩阵中每个元素不超过80,不小于0

输出:

一行,表示最大的总和。

样例输入:

3
1 1 10
1 3 5
2 2 6
2 3 4
3 1 8
3 2 2
0 0 0

样例输出:

30
#include <stdio.h>
#include <stdlib.h>#define MAX_N 10  // 定义最大值常量int n;  // 定义整数变量n
int a[MAX_N + 1][MAX_N + 1];  // 定义二维数组a
int f[(MAX_N * 2) + 1][MAX_N + 1][MAX_N + 1];  // 定义三维数组fint main() {int i, j, k, x, y;  // 定义整数变量i, j, k, x, yscanf("%d", &n);  // 从标准输入读取n的值// 读取i, j, k的值,直到i为0,将k赋值给a[i][j]while (scanf("%d%d%d", &i, &j, &k), i != 0) {a[i][j] = k;}f[1][1][1] = a[1][1];  // 将a[1][1]的值赋给f[1][1][1]// 循环计算最大路径和for (k = 2; k < (n * 2); k++) {for (i = 1; i <= k && i <= n; i++) {for (j = 1; j <= k && j <= n; j++) {// 计算x的值if (i == j) {x = a[i][k + 1 - i];} else {x = a[i][k + 1 - i] + a[j][k + 1 - j];}y = f[k - 1][i][j];  // 初始化y为f[k-1][i][j]// 更新y为四个方向的最大值if (f[k - 1][i - 1][j - 1] > y) {y = f[k - 1][i - 1][j - 1];}if (f[k - 1][i][j - 1] > y) {y = f[k - 1][i][j - 1];}if (f[k - 1][i - 1][j] > y) {y = f[k - 1][i - 1][j];}f[k][i][j] = x + y;  // 计算当前位置的最大路径和}}}printf("%d\n", f[n * 2 - 1][n][n]);  // 输出最终结果return 0;  
}

这段代码实现的是一个动态规划算法,用于求解一个二维矩阵中从起点到终点的最大路径和。

1、首先,我们定义了一个二维数组 a 用于存储输入的矩阵。然后,我们定义了一个三维数组 f 作为状态数组,用于存储每个位置的最大路径和。

2、接下来,我们遍历 k,表示路径长度。对于每个 k 值,我们使用三重循环遍历矩阵的每个位置 (i, j),其中 ij 分别表示当前位置的行和列。

在每个位置 (i, j),我们根据不同的情况计算出路径长度为 k 时的最大路径和:

  • 如果 i 等于 j,说明当前位置在矩阵的主对角线上,此时路径长度为 k 的最大路径和等于当前位置的值 a[i][k+1-i]
  • 如果 i 不等于 j,说明当前位置不在主对角线上,此时路径长度为 k 的最大路径和等于当前位置的值 a[i][k+1-i] 加上位置 (i, j) 左上方和右上方两个位置的最大路径和中的较大值。

3、最后,我们输出 f[n*2-1][n][n],即路径长度为 n*2-1(矩阵中元素数的两倍减一)时,终点位置 (n, n) 的最大路径和。

该算法通过动态规划的思想,利用已计算出的较小路径长度的最大路径和,逐步推导得到较大路径长度的最大路径和,最终得到了问题的解。

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

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

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

相关文章

vue2 bug求助!!!(未解决,大概是浏览器缓存的问题或者是路由的问题)

我的vue2项目出现了一个超级恶心的bug 具体流程&#xff1a; 页面a点击a标签->到页面b->页面b用户退出刷新页面->点击浏览器的返回按钮返回上一页 返回页面后页面没有刷新导致用户名还显示这 项目中没有用keep-alive缓存 也在设置了key 尝试了window.addEventListe…

idea实用快捷键(持续更新...)

文章目录 1、快速输入try/catch/finally2、选中多个光标3、实现接口4、方法参数提示5、查看某个类的子类6、弹出显示查找内容的搜索框 1、快速输入try/catch/finally CtrlAltT 2、选中多个光标 ShiftAlt单机多选 End可以全部到行尾&#xff0c;Home则可以全部回到行首 3、实现接…

存储过程定义及优势

存储过程 是一组为了完成特定功能的SQL语句集合&#xff0c;经编译后存储在数据库中&#xff0c;用户通过指定存储过程的名字和参数&#xff08;如果有&#xff09;来调用并执行它。存储过程可以在SQL Server、Oracle、MySQL等关系型数据库中创建和使用。 存储过程的定义&…

评价一个AI模型“好不好”“有没有发展”,首先就躲不掉“开源”和“闭源”两条发展路径。对于这两条路径,你更看好哪一种呢?

评价一个AI模型的发展潜力和好坏时&#xff0c;确实需要考虑它是走“开源”还是“闭源”的发展路径。两者各有优缺点&#xff0c;具体选择哪一种路径更好&#xff0c;要根据具体情况和目标来决定。 开源路径 优点&#xff1a; 透明性和安全性&#xff1a; 开源代码允许任何人…

Python深度学习基于Tensorflow(14)人脸检测和识别实例

文章目录 人脸检测研究现状传统的人脸检测算法深度学习人脸检测算法 人脸识别实战人脸检测人脸对齐人脸标准化人脸表示人脸验证 参考资料 人脸检测研究现状 这里直接引用了吴伟硕士毕业论文 随着计算能力的飞速提升和创新性的传感、分析、渲染设备和技术的广泛应用&#xff0c…

【TB作品】msp430g2553单片机,流速,流量,检测与显示

功能 采用P1.4作为ADC输入通道&#xff0c;采集流量&#xff0c;显示到oled&#xff0c;并串口发送。 硬件 //OLED // SCL接P2^0 // SDA接P2^1 //vcc接VCC //GND接GND //串口 //P1.1 RXD, P1.2TXD //P1.1接模块的TX P1.2接模块的RX 反着接 //ADC通道 //采用P1.4作为ADC输…

LoRA低秩自适应微调技术原理及实践

大型语言模型的低秩自适应 (LoRA) 用于解决微调大型语言模型 (LLM) 的挑战。GPT 和 Llama 等模型拥有数十亿个参数&#xff0c;通常对于特定任务或领域进行微调的成本过高。LoRA 保留了预训练的模型权重&#xff0c;并在每个模型块中加入了可训练层。这显著减少了需要微调的参数…

k8s学习--ConfigMap详细解释与应用

文章目录 一 什么是configmapConfigMap 的好处ConfigMap 的限制 二.创建ConfigMap的4种方式1.在命令行指定参数创建2.在命令行通过多个文件创建3.在命令行通过文件提供多个键值对创建4.YAML资源清单文件创建 三 configmap的两种使用方法1.通过环境变量的方式传递给pod2.通过vol…

提高LabVIEW程序员分析需求、写代码、测试能力的方法

分析需求 深入了解项目背景&#xff1a;在开始任何项目之前&#xff0c;程序员应该深入了解项目的背景和目标。这包括与客户或项目干系人进行详细讨论&#xff0c;理解他们的期望和需求。参加相关的行业研讨会和阅读技术文档也有助于更好地了解项目背景。 使用需求管理工具&am…

MySQL学习——影响选项文件处理的命令行选项和程序选项修改器

大多数支持选项文件的MySQL程序都处理以下选项。因为这些选项会影响选项文件的处理&#xff0c;所以必须在命令行上给出&#xff0c;而不是在选项文件中给出。为了正常工作&#xff0c;这些选项中的每一个都必须先于其他选项给出&#xff0c;但以下情况除外&#xff1a; -prin…

WLAN组网模型探究

目录 一、WLAN基本概念二、WLAN组网方式三、WLAN转发模型 随着信息技术的飞速发展&#xff0c;无线局域网&#xff08;WLAN&#xff09;已逐渐成为企业网络架构中不可或缺的一部分。不同的企业组织因其业务特性、规模大小及安全需求的不同&#xff0c;对WLAN的要求也各有侧重。…

物联网面试准备

volatile的作用 volatile关键字用于告诉编译器&#xff0c;该变量可能会在程序的执行过程中被意外更改&#xff0c;因此编译器不应该对该变量进行优化或者缓存。 这样可以确保每次访问该变量时都会从内存中读取最新的值&#xff0c;而不是使用缓存中的旧值。 在多线程编程中&…

C语言习题~day28

关于文本文件和二进制文件描述错误的是&#xff1f; A.文本文件是可以读懂的&#xff0c;二进制文件没办法直接读懂 B.数据在内存中以二进制的形式存储&#xff0c;如果不加转换的输出到外存&#xff0c;就是二进制文件 C.将内存中的数据转化成ASCII码值的形式&#xff0c;并…

Arduino IDE 2.3.2找不到端口解决方法

Arduino IDE 2.3.2找不到端口解决方法 问题描述 Arduino IDE 2.3.2 软件找不到端口(端口显示灰色)&#xff0c;Arduino开发板连接电脑后&#xff0c;设备管理器能够看到端口信息&#xff0c;Arduino IDE软件中看不到端口。 设备管理器中能够看到端口信息 Arduino IDE中端口显…

力扣5 最长回文子串

给你一个字符串 s&#xff0c;找到 s 中最长的 回文子串。 示例 1&#xff1a; 输入&#xff1a;s "babad" 输出&#xff1a;"bab" 解释&#xff1a;"aba" 同样是符合题意的答案。示例 2&#xff1a; 输入&#xff1a;s "cbbd" 输…

植物大战僵尸杂交版(最新版)

杂交版1.0文件链接 链接&#xff1a;https://pan.baidu.com/s/1Ew6iTg0_d_Ut8N9_18KGLw 提取码&#xff1a;yspa 杂交版2.0文件链接 链接:https://pan.baidu.com/s/1tuchowb4C_oNT6EpqSvr_w?pwdy2fz 提取码:y2fz

HTML静态网页成品作业(HTML+CSS)—— 香奈儿香水介绍网页(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

上位机图像处理和嵌入式模块部署(f407 mcu中tf卡模拟u盘)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在f407开发板上面&#xff0c;本身是有一个usb接口的。这个usb接口也不仅仅是作为电源使用的&#xff0c;它还可以用来做很多的事情。一方面&#…

pymupdf提取pdf表格及表格数据合并

pymupdf提取pdf表格非常快速&#xff0c;相比其他库是个更好的选择&#xff0e; 一个行列多的表格打印成pdf后会由于页宽分页原因变成多个表格&#xff0c;提取的多个表格需要合并为一个表格&#xff0c;再来处理数据&#xff0e; 下面代码中merge函数用于合并表格&#xff0…

label标签

01、label标签 概述 label标签页属于&#xff1a;form元素的成员之一&#xff0c;它有啥意义呢&#xff1f;它主要用来修饰文本和form元素的指向和体验问题。我们只需要把文本和form元素使用label标签包裹&#xff0c;就可以产生一个奇妙的化学反应。就是&#xff1a;我们点击…