中北大学算法课动态规划问题实验:题目1 数塔问题

目录

  • 1.实验名称
  • 2.实验目的
  • 3.实验内容
  • 4.实验过程
    • 伪代码
    • java代码
  • 5.实验结论及心得
    • 代码运行截图
    • 心得
  • 实验报告

1.实验名称

动态规划问题实验:题目1 数塔问题

2.实验目的

(1)掌握动态规划法的设计思想;
(2)掌握数塔问题的具体实现过程;
(3)熟练掌握二维数组的使用方法;
(4)在掌握的基础上编程实现数塔问题的具体实现过程。

3.实验内容

给出一个数塔,从该数塔的顶层出发,在每一个节点可以选择向左走或向右走,一直走到该数塔的最底层,我出一条路径,使得路径上的数值和最大,输出最大数值及其路径,输出时要求有文字说明。请任选一种语言编写程序实现上述算法,并分析其算法复杂度。

4.实验过程

伪代码

在这里插入图片描述

java代码

import java.util.Scanner;
public class DataTower {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubScanner sc  = new Scanner(System.in);System.out.println("请输入数塔层数:");int n = sc.nextInt();int [][]  num = new int [n][n];for (int i = 0; i <n; i++) {for (int j = 0; j <=i; j++) {num[i][j]=sc.nextInt();}}int[][] tower= num;for(int i = 0;i<tower.length;i++) {for(int j = 0;j<tower[i].length-1;j++) {System.out.print(tower[i][j] + " ");}System.out.println(tower[i][tower[i].length-1]);	  }	  tpWalk(tower);}public static void tpWalk(int[][] tower) {int[][] dpTower = new int[tower.length][];dpTower[tower.length - 1] = tower[tower.length-1];for(int i = tower.length - 2;i >= 0;i--) {dpTower[i] = tower[i].clone();for(int j = 0;j<dpTower[i].length-1;j++) {if(dpTower[i+1][j] > dpTower[i+1][j+1])dpTower[i][j] += dpTower[i+1][j];else {dpTower[i][j] += dpTower[i+1][j+1];}}}System.out.println("最优路径长度:" + dpTower[0][0]);System.out.println("最优路径:");int j=0;//路径节点for(int i = 0;i<dpTower.length-1;i++) {if(j<dpTower[i].length-1 && dpTower[i][j] < dpTower[i][j+1])j =j+1;	System.out.print(tower[i][j] + "->");}if(j<dpTower[dpTower.length-1].length-1 && dpTower[dpTower.length-1][j] < dpTower[dpTower.length-1][j+1])j =j+1;	System.out.println(tower[dpTower.length-1][j]);}
}

5.实验结论及心得

代码运行截图

在这里插入图片描述
在这里插入图片描述

心得

1.问题分解:数塔问题让我更深刻地理解了如何将复杂问题分解为更小、更易于管理的子问题。通过递归地定义问题并逐步求解,我能够构建出整个问题的解决方案。
2.动态规划的力量:通过这次编程实践,我体会到了动态规划在解决具有重叠子问题和最优子结构特性的问题时的强大能力。动态规划方法通过存储中间结果避免了重复计算,显著提高了算法的效率。
3.状态转移的理解:在数塔问题中,正确地定义状态转移方程是解决问题的关键。我学会了如何根据问题的特点推导出状态转移方程,并用它来指导编程实现。

实验报告

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

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

相关文章

webpack 打包配置

主要实现功能 处理html、css、js、vue、jsx、图片等文件压缩处理好的文件分割压缩好的文件路由懒加载开启缓存和热更新开启多线程打包… 新建【webpack.config.js】 新建【webpack.dev.js】开发打包配置新建【webpack.prod.js】生产打包配置新建【webpack.config.js】&#…

Spring Boot中的事务管理策略

Spring Boot中的事务管理策略 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨在Spring Boot应用中的事务管理策略&#xff0c;以及如何通过合…

评估大型语言模型生成文章的能力

1. AI解读 1.1. 总体概要 本文探讨了大型语言模型&#xff08;LLMs&#xff09;如GPT-4在生成特定领域&#xff08;如计算机科学中的自然语言处理NLP&#xff09;教育调查文章方面的能力和局限性。研究发现&#xff0c;尽管GPT-4能够根据特定指导生成高质量的调查文章&#x…

Pytorch中torch.cat()函数的使用及说明

如果你有两个形状为 (3, 4) 的tensor A 和 B&#xff0c;并且你想要在第一个维度上连接它们&#xff0c;你可以这样做&#xff1a; import torchA torch.randn(3, 4) B torch.randn(3, 4) C torch.cat([A, B], dim0) # dim0 表示在第一个维度上连接 此时 C 的形状将会是 …

kafka consumer客户端消费逻辑解析

kafka consumer客户端消费逻辑解析 一、主要消费步骤二、提交策略【步骤2代码解析】【提交策略总结】 三、拉取策略&#xff08;待补充&#xff09;四、消费策略【代码解析】【消费策略总结】 一、主要消费步骤 这是kafka客户端拉取消息的入口&#xff0c;有4个主要部分 1、启…

【Rust】function和methed的区别

文章目录 functionmethedAssociated Functions 参考资料 一句话总结&#xff1a; function和methed很多都是相同的。 不同点在于&#xff1a; methed定义在结构体里面&#xff0c;并且它的第一个参数肯定是self&#xff0c;代表结构体实例。方法需要用实例名.方法名调用当然结…

苏东坡传-读书笔记三

苏东坡去世之后&#xff0c;一黄某获得苏东坡一珍贵的手稿&#xff0c;其中有苏东坡下列的名句&#xff1a; “处贫贱易&#xff0c;处富贵难。安劳苦易&#xff0c;安闲散难。忍痛易&#xff0c;忍痒难。人能安闲散&#xff0c;耐富贵&#xff0c;忍痒&#xff0c;真有道之士也…

三生随记——暗夜诊所

在偏远的小镇边缘&#xff0c;矗立着一座看似普通的诊所。这座诊所历史悠久&#xff0c;据传已经存在了几十年&#xff0c;但关于它的具体来历和背后的故事&#xff0c;却鲜有人知。它的外表看似破旧不堪&#xff0c;但内部却异常整洁&#xff0c;散发着一种神秘而诡异的气息。…

vCenter-vAPI-Endpoint service health shows as Yellow

- 问题摘要&#xff1a;vAPI-Endpoint service health shows as Yellow - 解决方案/工作方法&#xff1a; 使用命令重启vAPI Endpoint service后该服务运行正常。 service-control --stop vmware-vapi-endpoint service-control --start vmware-vapi-endpoint VMware KB&…

详细分析Oracle修改默认的时间格式(四种方式)

目录 前言1. 会话级别2. 系统级别3. 环境配置4. 函数格式化5. 总结 前言 默认的日期和时间格式由参数NLS_DATE_FORMAT控制 如果需要修改默认的时间格式&#xff0c;可以通过修改会话级别或系统级别的参数来实现 1. 会话级别 在当前会话中设置日期格式&#xff0c;这只会影响…

uni-app (通过HBuilderX 和 VS Code 开发)详细连接过程教学。

使用 HBuilderX 创建 uni-app 项目 并编译到微信开发者工具。 uni-app 支持两种方式创建项目&#xff1a; 通过 HBuilderX 创建 通过命令行创建 首先我们需要先下载HBuilderX 下载链接地址&#xff1a;DCloud - HBuilder、HBuilderX、uni-app、uniapp、5、5plus、mui、wap2…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] LYA的登山之旅01(100分)- 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

如何在 HTML 中实现响应式设计以适应不同设备的屏幕尺寸?

要在HTML中实现响应式设计以适应不同设备的屏幕尺寸&#xff0c;可以使用CSS媒体查询和流动布局。 以下是实现响应式设计的一些关键步骤&#xff1a; 使用CSS媒体查询&#xff1a;CSS媒体查询允许根据屏幕尺寸和设备特性应用不同的CSS样式。通过在CSS中使用media规则&#xf…

第四十一章 使用 二进制 SOAP 格式

文章目录 第四十一章 使用 二进制 SOAP 格式介绍扩展 Web 服务的 WSDL 第四十一章 使用 二进制 SOAP 格式 数据平台 SOAP 支持提供了可选的专有二进制 SOAP 格式&#xff0c;当发送和接收大型 SOAP 消息并希望最小化消息大小时&#xff0c;该格式非常有用。 Web 服务可以接收…

js文件的执行和变量初始化缓存

js文件和变量初始化 全局变量举例js文件加载 全局变量举例 import * as turf from "turf/turf"; import earcut from "earcut"; import * as THREE from "three"; import { TextGeometry } from "three/addons/geometries/TextGeometry.js…

《梦醒蝶飞:释放Excel函数与公式的力量》6.4 TODAY函数

第四节&#xff1a;6.4 TODAY函数 1&#xff09;TODAY函数概述 TODAY函数是Excel中一个非常有用的内置函数&#xff0c;它返回当前的日期。与NOW函数不同&#xff0c;TODAY函数仅返回日期部分&#xff0c;时间部分默认为午夜&#xff08;0:00&#xff09;。 2&#xff09;函…

[数据质量]手动实现 阿里云DataWorks 的数据质量监控告警功能

目录 手动实现 DataWorks 的数据质量监控告警功能1. 简介:2. 数据表准备2.1 tmp_monitor_tbl_info (数据监控信息表)2.2 tmp_monitor_rule_info (数据质量监控规则表)2.3 tmp_monitor_tbl_info_log_di (数据监控信息记录表) 3. 程序开发3.1 数据检查程序3.2 告警信息推送程序3.…

Jenkins教程-10-发送飞书测试报告通知

上一小节我们学习了发送企业微信测试报告通知的方法&#xff0c;本小节我们讲解一下发送飞书测试报告通知的方法。 1、自动化用例执行完后&#xff0c;使用pytest_terminal_summary钩子函数收集测试结果&#xff0c;存入本地status.txt文件中&#xff0c;供Jenkins调用 conft…

MyBatis(9)MyBatis 的一级缓存和二级缓存的区别

MyBatis 提供了两级缓存机制&#xff1a;一级缓存&#xff08;Session级别&#xff09;和二级缓存&#xff08;全局级别&#xff09;&#xff0c;以提高应用的性能通过减少数据库的查询次数。 一级缓存&#xff08;Session级别&#xff09; 一级缓存是基于 SQL 会话&#xff…

优化 C# 和 .NET Core Web API 中的 LINQ 查询

LINQ&#xff08;语言集成查询&#xff09;是 C# 中的一项强大功能&#xff0c;允许开发人员以可读且简洁的方式查询和操作数据。但是&#xff0c;LINQ 的使用效率低下可能会导致性能瓶颈&#xff0c;尤其是在处理 .NET Core Web API 中的大型数据集时。优化 LINQ 查询对于维护…