中北大学算法课动态规划问题实验:题目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 stub
		Scanner 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.状态转移的理解:在数塔问题中,正确地定义状态转移方程是解决问题的关键。我学会了如何根据问题的特点推导出状态转移方程,并用它来指导编程实现。

实验报告

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

移动UI:我的界面,竟然有这么设计方式,而且个个都简洁美观。

移动应用中的个人中心页面通常包含以下内容&#xff1a; 1. 用户头像和昵称&#xff1a;展示用户的头像和昵称&#xff0c;用于个人身份的展示和识别。 2. 个人资料&#xff1a;展示用户的个人信息&#xff0c;如姓名、性别、生日、联系方式等。用户可以在这里查看和编辑自己…

【MySQL】(基础篇十七) —— 存储过程

存储过程 本文将介绍什么是存储过程&#xff0c;为什么要使用存储过程以及如何使用存储过程&#xff0c;并且介绍创建和使用存储过程的基本语法。 MySQL的存储过程是预编译的SQL语句集合&#xff0c;它们作为一个可执行单元存储在数据库中。存储过程能够封装复杂的业务逻辑&a…

轻松驾驭文件重命名:一键实现文件名更改并高效复制新文件名,让文件管理变得简单高效

在信息爆炸的时代&#xff0c;我们的电脑中存储着成千上万的文件&#xff0c;这些文件或是珍贵的回忆&#xff0c;或是重要的工作资料。然而&#xff0c;随着时间的推移&#xff0c;我们可能需要对这些文件进行整理和管理&#xff0c;其中最常见的一项操作就是文件名的重命名。…

记一次对ouija渗透测试c语言逆向学习

概要 初始知识 web应用枚举 二进制逆向 文件枚举 堆栈溢出 学到知识 hash长度攻击 任意文件读取 二进制逆向分析 信息收集 端口扫描 nmap --min-rate 1000 -p- 10.129.30.104 发现22&#xff0c;80&#xff0c;3000端口 网站探测 目录枚举 feroxbuster -u http://10.1…

【JVM】Java虚拟机运行时数据分区介绍

JVM 分区&#xff08;运行时数据区域&#xff09; 文章目录 JVM 分区&#xff08;运行时数据区域&#xff09;前言1. 程序计数器2. Java 虚拟机栈3. 本地方法栈4. Java 堆5. 方法区6. 运行时常量池7. 直接内存 前言 之前在说多线程的时候&#xff0c;提到了JVM虚拟机的分区内存…

数值稳定性、模型初始化和激活函数

一、数值稳定性&#xff1a;神经网络很深的时候数据非常容易不稳定 1、神经网络梯度 h^(t-1)是t-1层的输出&#xff0c;也就是t层的输入&#xff0c;y是需要优化的目标函数&#xff0c;向量关于向量的倒数是一个矩阵。 2、问题&#xff1a;梯度爆炸、梯度消失 &#xff08;1&…

OpenAI“断供”对我们的影响之我见

1.新闻 OpenAI决定于7月关闭国内GPT访问 近日&#xff0c;美国人工智能公司OpenAI宣布&#xff0c;将于7月起关闭对中国内地的GPT访问&#xff0c;此举引发了业内广泛关注和讨论。以下是关于此新闻的具体信息&#xff1a; 关闭时间&#xff1a;OpenAI官方推送的邮件指出&…

Leaflet【五】Marker点闪烁效果

控制点的透明度 在创建marker的构造当中会传递一个配置对象&#xff0c;这个里面就可以配置对应的透明度opacity&#xff0c;那么只需要去修改这个透明度的值就好了。通过定时器去一直改值即可。 const changeOpacity (entity) > {let i 1;let int setInterval(() >…

谷歌发布两款新Gemma 2大语言模型;阿里云开源Qwen2-72B模型荣登榜首

&#x1f989; AI新闻 &#x1f680; 谷歌发布两款新Gemma 2大语言模型 摘要&#xff1a;谷歌发布Gemma 2大语言模型&#xff0c;包括90亿和270亿参数两种版本。Gemma 2在推理性能、效率和安全性上较第一代有显著提升。27B模型的性能媲美更大规模的主流模型&#xff0c;且部署…

【C++题解】1721. 输出个位为5或者个位为8数

问题&#xff1a;1721. 输出个位为5或者个位为8数 类型&#xff1a;简单循环 题目描述&#xff1a; 请从小到大输出 1∼n 中所有个位为 5 或者个位为8 的所有的整数&#xff0c;每行 1 个。 比如&#xff0c;假设 n20&#xff0c;那么满足条件的数输出如下&#xff1a; 5 8 1…

尊重·理解·协同:论团队合作中的认知提升与信誉建设

零、背景 为什么写博客&#xff1f; 给自己灌输大道理—唠叨哲学 定期总结&#xff1a;反思这段时间内的生活、学习或工作中的得失&#xff0c;提炼出具有普适性的经验和教训。 紧跟热点新闻来有点流量 独特视角&#xff1a;尽量优先进行——人云亦云&#xff0c;先学某一…

MQTT遗嘱信息(2)

接前一篇文章&#xff1a;MQTT遗嘱信息&#xff08;1&#xff09; 本文内容参考&#xff1a; 什么是MQTT遗嘱消息&#xff1f;如何配置和处理遗嘱消息&#xff1f;_mqtt last will-CSDN博客 MQTT 协议学习&#xff1a;Retained&#xff08;保留消息&#xff09; 与 LWT&#x…

Stream Lua Nginx Module 插件一键安装

文章目录 一、场景说明二、脚本职责三、参数说明四、操作示例五、注意事项 一、场景说明 本自动化脚本旨在为提高研发、测试、运维快速部署应用环境而编写。 脚本遵循拿来即用的原则快速完成 CentOS 系统各应用环境部署工作。 统一研发、测试、生产环境的部署模式、部署结构、…

Linux容器篇-Docker容器的使用

文章目录 前言一、Docker的安装主机环境准备关闭防火墙关闭selinux时间同步关闭 swap配置操作系统yum源配置国内Docker-ce镜像源注意 二、安装docker-ce三、配置镜像加速器阿里云镜像加速器生成 四、Docker的使用Docker 客户端获取镜像启动容器查看所有的容器&#xff1a;启动已…

内外网共享文件最优方案,了解一下

基于安全性、合规性、数据防泄漏等原因&#xff0c;为了保护核心数据&#xff0c;企业一般会做内外网隔离&#xff0c;隔离后仍存在数据交换共享的需求。数字化时代&#xff0c;数据的流通与共享成为企业和团队之间日常运营的关键环节。内外网共享文件是指在内网和外网之间共享…

【知识学习】阐述Unity3D中动画渲染的概念及使用方法示例

Unity3D中的卡通渲染&#xff08;Cartoon Rendering&#xff09;是一种渲染技术&#xff0c;它模仿传统手绘动画或漫画的视觉效果。这种渲染风格通常具有鲜明的颜色、清晰的轮廓线和简化的光影效果&#xff0c;常用于制作动画、游戏和其他视觉媒体。 卡通渲染的基本概念 轮廓…

绩效管理过程中,定性指标的设计评价怎么做?

导读&#xff1a;企业在设计具体的定性考核标准时&#xff0c;可以运用一些量化的方式&#xff0c;使得最终的考核更具针对性和操作性&#xff0c;但是定性指标不可能完全量化分析&#xff0c;管理者不能过度追求量化原则&#xff0c;设计一些无效的指标。 绩效管理过程中&…

03逻辑门电路

分立门电路&#xff1a; 集成门电路&#xff1a; TTL门电路 MOS门电路&#xff1a;NMOS门电路、PMOS门电路、CMOS门电路 BICMOS门电路&#xff1a;CMOS的高输入阻抗和TTL的高放大倍数的结合 向更低功耗、更高速度发展 MOS管的Rdson在可变电阻区的阻值也一般会小于1000欧姆 …

django学习入门系列之第三点《伪类简单了解》

文章目录 hover&#xff08;伪类&#xff09;after&#xff08;伪类&#xff09;往期回顾 hover&#xff08;伪类&#xff09; 伪类指的是用冒号加的 hover样式指的是&#xff0c;当用户光标移动到设定区域后&#xff0c;所执行的用法 如&#xff1a; <!DOCTYPE html>…

并发编程工具集——Lock和Condition(上)(十二)

简述&#xff1a;Java SDK 并发包通过 Lock 和 Condition 两个接口来实现管程&#xff0c;其中 Lock 用于解决互斥问题&#xff0c;Condition 用于解决同步问题。 再造管程的理由和期望 理由&#xff1a;synchronized 没有办法解决“破坏不可抢占条件方案”。 原因是synchroniz…