动态规划(二)——例题
目录
Help Jimmy
题目
解题思路
神奇的口袋
题目
枚举的解法
递归的解法
动态规划的解法
滑雪
题目
解题思路
解法一
解法二
Help Jimmy
题目
"Help Jimmy" 是在下图所示的场景上完成的游戏:

场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度无限。
Jimmy老鼠在时刻0从高于所有平台的某处开始下落,它的下落速度始终为1米/秒。当Jimmy落到某个平台上时,游戏者选择让它向左还是向右跑,它跑动的速度也是1米/秒。当Jimmy跑到平台的边缘时,开始继续下落。Jimmy每次下落的高度不能超过MAX米,不然就会摔死,游戏也会结束。
设计一个程序,计算Jimmy到底地面时可能的最早时间。
输入
第一行是测试数据的组数t(0 <= t <= 20)。每组测试数据的第一行是四个整数N,X,Y,MAX,用空格分隔。N是平台的数目(不包括地面),X和Y是Jimmy开始下落的位置的横竖坐标,MAX是一次下落的最大高度。接下来的N行每行描述一个平台,包括三个整数,X1[i],X2[i]和H[i]。H[i]表示平台的高度,X1[i]和X2[i]表示平台左右端点的横坐标。1 <= N <= 1000,-20000 <= X, X1[i], X2[i] <= 20000,0 < H[i] < Y <= 20000(i = 1..N)。所有坐标的单位都是米。
Jimmy的大小和平台的厚度均忽略不计。如果Jimmy恰好落在某个平台的边缘,被视为落在平台上。所有的平台均不重叠或相连。测试数据保证问题一定有解。
1
3 8 17 20
0 10 8
0 10 13
4 14 3
输出
对输入的每组测试数据,输出一个整数,Jimmy到底地面时可能的最早时间。
23
解题思路
Jimmv跳到一块板上后,可以有两种选择,向左走,或向右走。
走到左端和走到右端所需的时间,是很容易算的。
如果我们能知道,以左端为起点到达地面的最短时间,和以右端为起点到达地面的最短时间,那么向左走还是向右走,就很容选择了。
因此,整个问题就被分解成两个子问题,即Jimmv所在位置下方第一块板左端为起点到地面的最短时间,和右端为起点到地面的最短时间。
这两个子问题在形式上和原问题是完全一致的。将板子从上到下从1开始进行无重复的编号(越高的板子编号越小,高度相同的几块板子,哪块编号在前无所谓),那么,和上面两个子问题相关的变量就只有板子的编号。
不妨认为Jimmy开始的位置是一个编号为0,长度为0的板子假设LeftMinTime(k)表示从k号板子左端到地面的最短时间,RightMinTime(k)表示从k号板子右端到地面的最短时间,那么,求板子k左端点到地面的最短时间的方法如下:
if(板子k左端正下方没有别的板子){if( 板子k的高度 h(k) 大于Max)LeftMinTime(k) =00;elseLeftMinTime(k) h(k);
}
else if( 板子k左端正下方的板子编号是m){LeftMinTime(k) = h(k)-h(m) +Min( LeftMinTime(m) + Lx(k)-Lx(m) RightMinTime(m)+ Rx(m)-Lx(k));
}
上面,h(i)就代表i号板子的高度,Lx(i)就代表i号板子左端点的横坐标,Rx(i)就代表i号板子右端点的横坐标。那么 h(k)-h(m)当然就是从k号板子跳到m号板子所需要的时间,Lx(k)-Lx(m) 就是从m号板子的落脚点走到m号板子左端点的时间,Rx(m)-Lx(k)就是从m号板子的落脚点走到右端点所需的时间。
求RightMinTime(k)的过程类似。
不妨认为Jimmy开始的位置是一个编号为0,长度为0的板子,那么整个问题就是要求LeftMinTime(0)。
输入数据中,板子并没有按高度排序,所以程序中一定要首先将板子排序。
时间复杂度:
一共 n个板子,每个左右两端的最小时间各算一次O(n)
找出板子一段到地面之间有那块板子,需要遍历板子 O(n)
总的时间复杂度O(n2)
神奇的口袋
题目
有一个神奇的口袋,总的容积是40,用这个口袋可以变出一些物品,这些物品的总体积必须是40。John现在有n个想要得到的物品,每个物品的体积分别是a1,a2……an。John可以从这些物品中选择一些,如果选出的物体的总体积是40,那么利用这个神奇的口袋,John就可以得到这些物品。现在的问题是,John有多少种不同的选择物品的方式。
输入
输入的第一行是正整数n (1 <= n <= 20),表示不同的物品的数目。接下来的n行,每行有一个1到40之间的正整数,分别给出a1,a2……an的值。
3
20
20
20
输出
输出不同的选择物品的方式的数目。
3
枚举的解法
枚举每个物品是选还是不选,一共2的20次方种情况。
递归的解法
#include <iostream>
using namespace std;
int a[30]; int N;
int Ways(int w ,int k){//从前k种物品中选择一些,凑成体积w的做法数目if(w==0) return 1;if(k<=0) return 0;elsereturn Ways(wk-1)+Ways(w-a[k],k -1 );
}int main(){cin >> N;for(int i=1;i<=N;++i)cin >> a[i];cout << Ways(40,N);return 0;
}
动态规划的解法
#include <iostream>
using namespace std;
int a[30]; int N;
int Ways[50][50]://Ways[i][j]表示从前i种物品里凑出体积i的方法数
int main(){cin >> N;memset(Ways,0,sizeof(Ways));for( int i = 1;i <= N;++ i){cin >> a[i];I Ways[0][i]=1;}Ways[0][0] = 1;for(int w=1;w<=40; ++ W){for(int k =1;K <=N;++K){Ways[w][k]=Ways[w][k-1];if( w-a[k] >=0)Ways[w][k]+= Ways[w-a[k]][k-1];}}cout << Ways [40] [N] ;return 0;
}
滑雪
题目
Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长的滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行的滑坡为24-17-16-1。当然25-24-23-...-3-2-1更长。事实上,这是最长的一条。
输入
输入的第一行表示区域的行数R和列数C(1 <= R,C <= 100)。下面是R行,每行有C个整数,代表高度h,0<=h<=10000。
5 5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
输出
输出最长区域的长度。
25
解题思路
L(ij)表示从点(ii)出发的最长滑行长度。
一个点(ii),如果周围没有比它低的点,L(ij)=1
否则
递推公式:L(ij)等于(i.i)周围四个点中,比(ij)低,且L值最大的那个点的L值,再加1
复杂度:O(n2)
解法一
“人人为我”式递推
L(i.j)表示从点(i.j)出发的最长滑行长度。
一个点(i.j).如果周围没有比它低的点,L(i.j)=1
将所有点按高度从小到大排序。每个点的L值都初始化为1从小到大遍历所有的点。经过一个点(i.j)时,用递推公式求L(i.j)
解法二
“我为人人”式递推
L(i,j)表示从点(i,j)出发的最长滑行长度。
一个点(i.j),如果周围没有比它低的点,L(i,j)=1
将所有点按高度从小到大排序。每个点的L值都初始化为1
从小到大遍历所有的点。经过一个点(ii)时,要更新他周围的,比它高的点的L值。例如:
if H(i+1,j)>H(ij) //H代表高度
L(i+1,j)=max(L(i+1,j),L(i,j)+1)
相关文章:
动态规划(二)——例题
目录 Help Jimmy 题目 解题思路 神奇的口袋 题目 枚举的解法 递归的解法 动态规划的解法 滑雪 题目 解题思路 解法一 解法二 Help Jimmy 题目 "Help Jimmy" 是在下图所示的场景上完成的游戏: 场景中包括多个长度和高度各不相同的平台。地面是…...
Node.js中判断是文件还是文件夹的多种方法
在Node.js中,我们经常需要判断一个路径是文件还是文件夹。Node.js提供了多种方法来实现这一功能,本文将详细介绍这些方法,并给出相应的示例代码。 一、使用fs.Stats对象 在Node.js中,fs模块提供了fs.stat()或fs.statSync()方法&…...
idea 如何打war包
idea 如何打war包 1.在IntelliJ IDEA中打包WAR文件,你可以按照以下步骤操作:1.设置项目结构:首先,打开IDEA,选择File>Project Structure(或使用快捷键CtrlAltShiftS)。在打开的窗口中,选择 Artifacts 选项 2.添加Web Applicat…...
米联客-FPGA程序设计Verilog语法入门篇连载-15 Verilog语法_跨时钟域设计
软件版本:无 操作系统:WIN10 64bit 硬件平台:适用所有系列FPGA 板卡获取平台:https://milianke.tmall.com/ 登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑! 1概述 本小节主要讲解Verilog语法的…...
gradio 对话界面实现支持图片、视频正常显示
参考: https://www.gradio.app/docs/gradio/chatbot 问题: gradio网页输出视频nan;图片webp显示不出来 解决方法:需要通过gradio的Video、Image包装 代码: 这里下面启动个后端vlm模型(参考:https://blog.csdn.net/weixin_42357472/article/details/141126225),前端通…...
催收业务怎么提高接通率
提高催收呼叫业务的接通率是一个综合性的任务,需要从多个方面进行优化。以下是一些具体的策略和建议: 一、优化呼叫时间与频次 1. 选择合适的呼叫时间:通过分析目标客户的活跃时段,选择他们最可能接听电话的时间进行呼叫…...
动态生成sitemaps和robots.txt文件:提升SEO与网站可爬性
本文由 ChatMoney团队出品 在现代Web开发中,搜索引擎优化(SEO)是网站成功的关键因素之一。搜索引擎通过网络爬虫来索引网页,而sitemaps和robots.txt文件则是帮助这些爬虫更好地理解和索引网站内容的重要工具。 sitemaps简介 Sit…...
LeetCode 第二十五天 2024.8.12
1. :递增子序列 题目链接: 491. 非递减子序列 - 力扣(LeetCode) 应用条件:回溯 难点: 这道题的难点在于如何去重,肯定不能像我们在组合中去重那样对数组排序。而且我们是要对每一层进行去重,…...
Elasticsearch 全文查询详解
全文查询(Full-Text Query)是 Elasticsearch 中的核心功能之一,用于对非结构化文本数据进行高效检索。与结构化查询不同,全文查询不仅仅是简单的精确匹配,还包括对文本进行分析和处理,从而实现更复杂的搜索…...
20240810在荣品RK3588S-AHD开发板的预置Android13下挂载exFAT的256GB的TF卡
df -h mount fdisk无效 20240810在荣品RK3588S-AHD开发板的预置Android13下挂载exFAT的256GB的TF卡 2024/8/10 21:19 缘起:当时比较便宜96.9¥/想看看256GB的TF卡的高速卡的效果,就在京东入手了3张三星的高速TF卡。最近在弄RK3588S,…...
java基础进阶——log日志、类加载器、XML、单元测试、注解、枚举类
前言 这篇内容主要掌握的就是logback使用、理解类加载器、XML文件的编写,XML文档约束schema,用Dom4j解析XML文档,Xpath检索XML文档,完整使用Junit单元测试框架常用部分,注解的定义和使用,枚举类的定义和开发…...
《向量数据库指南》——控制Chatbot对话内容:Dopple AI的创新实践与用户体验优化
控制Chatbot对话内容:Dopple AI的创新实践与用户体验优化 在Chatbot技术日益成熟的今天,如何有效地控制对话内容,以满足用户多样化的需求,成为了开发者们关注的焦点。Dopple AI,作为一款先进的聊天机器人平台,通过其独特的交互设计和后端技术支持,为用户提供了前所未有…...
构建实时数据仓库:流式处理与实时计算技术解析
目录 一、流式处理 请求与响应 批处理 二、实时计算 三、Lambda架构 Lambda架构的缺点 四、Kappa架构 五、实时数据仓库解决方案 近年来随着业务领域的不断拓展,尤其像互联网、无线终端APP等行业应用的激增,产生的数据量呈指数级增长,对海量数…...
python算术表达式遗传算法
import random import operator import math# 定义可能的运算符和操作 ops {: ,-: -,*: *,/: /,sin: math.sin,cos: math.cos }# 随机生成一个表达式(个体) def generate_expression(depth0):if depth > 2: # 限制表达式的最大深度return str(rando…...
net.sf.jsqlparser.statement.select.SelectItem
今天一启动项目,出现了这个错误,仔细想了想,应该是昨天合并代码,导致的mybatis-plus版本冲突,以及分页PageHelper版本不兼容 可以看见这个我是最下边的 Caused by 报错信息,这个地方提示我 net .s…...
lua匹配MAC地址 正则表达式
LUA的正则表达式匹配很弱智,能不用lua就不要用lua。 %x表示十六进制数值 (%x%x):(%x%x):(%x%x):(%x%x):(%x%x):(%x%x)它不允许这样用: ((%x%x):){5}(%x%x)mac这还算好办,ipv4就难了,ipv6不可能,这样写下来那一串表达…...
Chainlit快速实现AI对话应用并将聊天数据的AWS S3 和 Azure Blob云服务中
自定义数据层 Literal AI 提供了最简单的方法来保存、分析和监控您的数据。 如果您正在考虑实现自定义数据层,请查看此处的示例以获取一些启发。 此外,我们非常希望看到社区主导的开源数据层实现并将其列在这里。如果您有兴趣做出贡献,请通过 Discord 与我们联系。 您需…...
浅谈性能优化(基于C++)
本文主要针对C的性能优化方法展开讨论。虽然这些方法也适用于一些其他语言,但由于C经常用于底层操作,提供了更多的优化空间;相比之下,诸如Python、Kotlin等高级语言由于其抽象程度更高,优化空间较少。 性能优化原理 …...
Python 报错:ModuleNotFoundError: No module named ‘Crypto‘
Crypto报错解决方案 Python 报错:ModuleNotFoundError: No module named Crypto前言问题解决方案 Python 报错:ModuleNotFoundError: No module named ‘Crypto’ 前言 Crypto是一个加密模块,它包含了多种加密算法,如 AES、DES、…...
UE(User Equipment) 和 UA(User Agent)
UE(User Equipment) UE 是 用户设备,这是一个泛指的术语,涵盖了所有类型的终端设备,例如手机、电脑、平板、智能手表等。这些设备可以连接到网络并进行通信。UE可以包含多种功能,包括对话(语音…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...
深度解析云存储:概念、架构与应用实践
在数据爆炸式增长的时代,传统本地存储因容量限制、管理复杂等问题,已难以满足企业和个人的需求。云存储凭借灵活扩展、便捷访问等特性,成为数据存储领域的主流解决方案。从个人照片备份到企业核心数据管理,云存储正重塑数据存储与…...
