疾风计划-程序设计基础-期末考试-05

news2024/11/24 17:09:08

擀面皮

有一块1x1的方形面团(不考虑面团的厚度),其口感值为0。擀面师傅要将其擀成一个N x M(纵向长N,横向宽M)的面皮。师傅的擀面手法娴熟,每次下手,要么横向擀一下(使得横向长度增加1),要么纵向擀一下(使得纵向长度增加1)。此外,当面团(皮)的大小为a x b时,往横向擀一下会使得面的口感值上升H_ab,而往纵向擀一下则会使口感值上升V_ab。

现在,请你来将1x1的面团擀成N x M面皮。显然,从1x1的面团擀成N x M的面皮有多种不同的操作序列可以实现,不同操作序列下得到的最终面皮口感值也可能是不同的。请问最终得到的N x M面皮,口感值最高可为多少?

输入描述

第一行两个整数N,M,表示要擀出来面皮的大小(纵向长N,横向宽M)。

接下来有N行,每行M个数。第a行第b列的数值H_ab,表示当面皮大小为a x b时,横向擀一下后,面皮口感的上升值。

再接下来有N行,每行M个数。第a行第b列的数值V_ab,表示当面皮大小为a x b时,纵向擀一下后,面皮口感的上升值。

(0 < N, M < 1000,0 <= H_ab, V_ab <= 1000)

输出描述

输出最终得到的N x M面皮的最高的口感值。

示例1:

输入:2 3
1 2 3
4 5 6
11 12 13
14 15 16
输出:20

 示例2:

输入:3 3
1 0 2
2 0 2
2 2 0
0 2 2
1 2 1
2 1 2
输出:7

 

提示

【示例1解释】

一共三种擀面方法:

纵横横:11+4+5=20

横纵横:1+12+5=18

横横纵:1+2+13=16

【示例2解释】

最优擀面方法为:横(1) + 纵(2) + 纵(2) + 横(2) = 7

限制

时间:1000ms

空间:512MB

#include <iostream>
#include <vector>

int main() {
	int m, n;
	std::vector<std::vector<int>> hSave;
	std::vector<std::vector<int>> vSave;
	std::cin>>m>>n;
	
	int result[m][n];
	for (int i = 0; i < m; ++i) {
		std::vector<int> temp(n);
		for (int j = 0; j < n; ++j) {
			std::cin>>temp[j];
		}
		hSave.push_back(temp);
	}

	for (int i = 0; i < m; ++i) {
		std::vector<int> temp(n);
		for (int j = 0; j < n; ++j) {
			std::cin>>temp[j];
		}
		vSave.push_back(temp);
	}

	result[0][0] = 0;
	for (int i = 1; i < m; ++i) {
		result[i][0] = result[i - 1][0] + vSave[i - 1][0];
	}
	for (int i = 1; i < n; ++i) {
		result[0][i] = result[0][i - 1] + hSave[0][i - 1];
	}

	for (int i = 1; i < m; ++i) {
		for (int j = 1; j < n; ++j) {
			result[i][j] = std::max(result[i - 1][j] + vSave[i - 1][j],
									result[i][j - 1] + hSave[i][j - 1]);
		}
	}

	std::cout<<result[m - 1][n - 1]<<std::endl;
	return 0;
}

解题算法:动态规划

解题思路:将擀面皮题转化为过门得分的思路,假设是m*n个房间,以m行n列的方式摆放在一起,从左上角(0, 0)出发,到右下角(m - 1, n - 1),且只能向右或向下,需要经过m - 1 + n - 1道门,因为不能通向外界,所以通向外界门的分数也就无用了,如下图

可见,纵向最下与横向最右,均为无法使用的值,所以我们只需要考虑可到达其他房间的门的数据。

我们知道到达每个房间时的得分,与上方的房间加门和左侧房间加门相关,取两者最大值,作为当前房间的得分。最左侧的每间房得分只与上方有关,顶层的每间房得分只与左侧有关,所以我们可以先得到顶层和最左侧的房间得分。

假设我们的表格名为result,横向数据用 h 表示,纵向数据用 v 表示我们的转移方程如下

result[i][j] = max(result[i-1][j]+v[i-1][j], result[i][j-1]+h[i][j-1])

因为顶层与最左侧已经填充完毕,所以不用担心下标为负值的情况。

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

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

相关文章

Ubuntu 20.04下的录屏与视频剪辑软件

ubuntu20.04下的录屏与视频剪辑 一、录屏软件SimpleScreenRecorder安装与使用 1、安装 2、设置录制窗口参数 3、开始录制 二、视频剪辑软件kdenlive的安装 1、安装 2、启动 一、录屏软件SimpleScreenRecorder安装与使用 1、安装 &#xff08;1&#xff09;直接在终端输入以下命…

嵌入式系统中的GPIO控制:从理论到实践与高级应用

本文将探讨嵌入式系统中的GPIO(通用输入输出)控制,着重介绍GPIO的原理和基本用法。我们将使用一个实际的示例项目来演示如何通过编程配置和控制GPIO引脚。将基于ARM Cortex-M微控制器,并使用C语言进行编写。 GPIO是嵌入式系统中最常见且功能最强大的接口之一。它允许硬件工…

【JVM】详解对象的创建过程

文章目录 1、创建对像的几种方式1、new关键字2、反射3、clone4、反序列化 2、创建过程步骤 1、检查类是否已经被加载步骤 2、 为对象分配内存空间1、指针碰撞针对指针碰撞线程不安全&#xff0c;有两种方案&#xff1a; 2、空闲列表选择哪种分配方式 步骤3、将内存空间初始化为…

C语言中的数组(详解)

C语言中的数组&#xff08;详解&#xff09; 一、一维数组1.一维数组的创建2.数组的初始化3.一维数组的使用4.一维数组在内存中的存储二、二维数组1.二维数组的创建2.二维数组的初始化3.二维数组的使用4.二维数组在内存中的存储三、数组越界四、数组作为函数参数1.冒泡排序2.数…

MySQL基础扎实——MySQL中有那些不同的表格

表格类型 在MySQL中&#xff0c;常见的表格类型有以下几种&#xff1a; MyISAM&#xff1a;是MySQL默认的表格类型&#xff0c;具有较高的性能和较小的存储空间占用。但是&#xff0c;MyISAM不支持事务、崩溃恢复和数据行级锁定。 InnoDB&#xff1a;是MySQL提供的一个更强大…

理解基本的Android编程 (1/2)

1、Android概述 Android 是一个开源的&#xff0c;基于 Linux 的移动设备操作系统。 Android开发优势 开放源代码 众多开发者及强大的社区 不断增长的市场 国际化的App集成 低廉的开发成本 更高的成功几率 丰富的开发环境 Android应用程序 Android 应用程序一般使用…

EtherNet/IP转Modbus网关以连接AB PLC

本案例为西门子S7-1200 PLC通过捷米特Modbus转EtherNet/IP网关捷米特JM-EIP-RTU连接AB PLC的配置案例。 网关分别从ETHERNET/IP一侧和MODBUS一侧读写数据&#xff0c;存入各自的缓冲区&#xff0c;网关内部将缓冲区的数据进行交换&#xff0c;从而实现两边数据的传输。 网关做为…

VMware NSX Advanced Load Balancer (NSX ALB) 22.1.4 - 负载均衡平台

VMware NSX Advanced Load Balancer (NSX ALB) 22.1.4 - 负载均衡平台 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-nsx-alb-22/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 负载均衡平台 NSX Advanced Load…

SpringBoot-6

Spring Boot 中的 MVC 支持 Spring Boot 的 MVC 支持主要来最常用的几个注解&#xff0c;包括RestController 用于声明控制器、RequestMapping用于实现方法映射地址、PathVariable 用于接受路径中的参数、RequestParam 用于接受 request 请求中的参数以及RequestBody 用于接受…

echarts 饼图中间添加文字

需求&#xff1a;饼图中间展示总量数据 方法一、设置series对应饼图的label属性 series: [{type: "pie",radius: [55%, 62%],center: ["67%", "50%"],itemStyle: {borderRadius: 10,borderColor: #fff,borderWidth: 2},// 主要代码在这里label: …

docker 的compose安装

1. Docker Compose 环境安装 Docker Compose 是 Docker 的独立产品&#xff0c;因此需要安装 Docker 之后在单独安装 Docker Compose 下载 curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-uname -s-uname -m -o /usr/local/bin/docker…

HBase有写入数据,页面端显示无数据量

写了一个测试类&#xff0c;插入几条数据&#xff0c;测试HBase的数据量。很简单的功能&#xff0c;这就出现问题了。。网页端可以看到&#xff0c;能够看到读写请求&#xff0c;但是不管是内存、还是磁盘&#xff0c;都没有数据。 于是就想到去HDFS查看&#xff0c;也是有数据…

VU3-02

1.一些小点 1.1 npm i -D less (安装less) -D 安装依赖到开发环境中 只在开发中生效 正式打包的时候没有它&#xff0c;只在开发时有效 1.2 父子组件传参 &#xff08;1&#xff09;子组件中定义自己的参数和事件 父传子&#xff1a;const props defineProps(["item&quo…

利用读时建模等数据分析能力,实现网络安全态势感知的落地

摘要&#xff1a;本文提出一种基于鸿鹄数据平台的网络安全态势感知系统&#xff0c;系统借助鸿鹄数据平台读时建模、时序处理、数据搜索等高效灵活的超大数据存储和分析处理能力&#xff0c;支持海量大数据存储、分类、统计到数据分析、关联、预测、判断的网络安全态势感知能力…

MySQL索引优化分析和锁详解

MySQL 1. 索引 1.1 索引的概述 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构&#xff08;有序&#xff09; 1.2 索引的优缺点 优点 提高数据检索效率,降低磁盘IO的成本通过索引列对数据进行排序, 降低数据排序的成本,降低CPU的消耗 缺点 索引是需要…

【使用回溯法求解八皇后问题(92个解)】

在每一个横列、竖列、斜列都只有一个皇后 解决的冲突 包括行、列和两条对角线规定每一行放置一个皇后&#xff0c;不会造成行上的冲突 当第col列被某个皇后占领之后&#xff0c;则同一列上的所有空格都不能再放置皇后&#xff0c;并且要把flag[col]置为被占领状态 对角线有两个…

【Docker】Docker的通信安全

Docker的通信安全 前言一、Docker 容器与虚拟机的区别1. 隔离与共享2. 性能与损耗 二、Docker 存在的安全问题1. Docker 自身漏洞2. Docker 源码问题 三、Docker 架构缺陷与安全机制1. 容器之间的局域网攻击2. DDoS 攻击耗尽资源3. 有漏洞的系统调用4. 共享 root 用户权限 四、…

OBS 迁移--华为云

一、创建迁移i任务 1. 登录管理控制台。 2. 单击管理控制台左上角的 在下拉框中选择区域。 3. 单击“ 服务列表 ”&#xff0c;选择“ 迁移 > 对象存储迁移服务 OMS ”&#xff0c;进入“ 对象存储迁移服务 ”页面。 4. 单击页面右上角“ 创建迁移任务 ”。 5. 仔细阅读…

卡尔曼滤波算法原理及示例

例程:物体做匀速运动每秒运动1m,观测器观测方差为1m

安全学习DAY06_抓包技术-HTTPHTTPS

抓包技术-HTTP&HTTPS HTTP&HTTPS抓包针对Web&APP&小程序&PC应用等 本节目的&#xff1a; 掌握几种抓包工具证书安装操作掌握几种HTTP&HTTPS抓包工具的使用学会Web&#xff0c;APP&#xff0c;小程序&#xff0c;PC应用等抓包了解本节课抓包是针对哪些…