动态规划法之蜘蛛侠救美记

从 0 到 1 构建 Graph RAG 系统:本地图谱 + 通义千问落地实践 本文介绍了一个基于知识图谱的检索增强生成系统(Graph RAG),该系统结合领域知识图谱、语义检索和大模型问答,旨在提供结构化、精准的技术问答服务。文章详细说明了项目背景、目标、核心技术架构以及实现方法,包括本地图谱构建、Neo4j数据库接入、语义检索和大模型集成等关键环节。该系统支持混合检索、多轮问答和知识图谱关联理解,能够有效减少大模型幻觉,提升问答的准确性和可解释性。文中还展示了核心代码结构和流程图,呈现了从文档加载到图谱构建再到问答生成的完整流程。该系统适用于需要处理复杂领域知识的研发和数据分析场 阅读详情

前言

  实验周的题目,使用动态规划法解决,感觉这个题目挺不错的。因为动态规划法用的不是很多,理解的也不是太透彻,所以把这道题目拿出来。

问题描述
  章鱼博士绑架了蜘蛛侠的女友乔丹把她关在西塔上,蜘蛛侠必须尽快到西塔去救她通过使用他的武器——蜘蛛网。蜘蛛侠的公寓到塔之间有一条笔直的路,路旁有许多高大的建筑物并且高度都不低于他的公寓。蜘蛛侠可以使用他的蜘蛛网到达大楼的另一边,图1显示了蜘蛛侠从他的公寓到B,从B到C,从C到塔。所有的建筑物(包括塔)被视为直线,并且在他划摆期间不能碰到地面这意味着蜘蛛网的长度不能大于建筑物的高度,在蜘蛛侠划摆期间不能倒退。




输入要求:
  输入的第一行包含测试用例的数量K(1<=K<=20),每个案例都以一个单独的整数N开始,K表示建筑物的数量,接下来的N行中每行包括两个整数Xi, Yi, (0 <= Xi, Yi <= 1000000)表示建筑物的位置和高度。第一个建筑是公寓而最后一个建筑是塔,以Xi的值递增输入而且不重复输入相同的Xi的值。

输出要求:
  对于每一个测试案例,输出一行划摆的最少次数,如果不能到达塔则输出-1。

问题分析
  对于公寓到塔的距离之间的任意一个位置P,可以有多种方式到达该点,题目的要求是在到达终点的多种方式中选择一个划摆次数最少的方式,这种在运行过程中不断用得到的数据去更新目标数据的方法和动态规划法有异曲同工之妙,所以本问题选择使用动态规划法来求解。

  首先考虑的问题是对于任意一个建筑物Ti(Xi, Yi),如果能够从该塔进行划摆,那么此次划摆的起点(Xi-1,Yi-1)与建筑物Ti(Xi, Yi)应该要满足一定的关系式。

  从题目的分析中可以得到,蜘蛛侠在划摆的过程中不能够碰到地面,这个就意味着蜘蛛网的长度不能够大于建筑物的高度,否则蜘蛛侠在划摆作圆周运动时因为半径过长而碰到地面则不符合题意。又因为每一次的划摆过程,不论其位置X为和值,其高度Y必等于公寓的高度Y0,这可以利用物理知识或者直接从图1中可以看出来。这样我们就可以求出划摆的起点(Xi-1,Yi-1)与建筑物Ti(Xi, Yi)之间满足的关系式,如下:




  这里利用勾股定理来计算建筑物Ti的有效起点距离L,这里的有效起点距离L如图所示:



  L的物理意义是凡是一次划摆的起点在L之内,那么都可以从建筑物Ti完成一个划摆。这也成为判断蜘蛛侠是否可以滑到终点塔的依据。如果有任意一次的划摆不满足这样的条件,那么就可以输出-1认为无法到达终点而不用再继续运行程序。

  当得到任意一个建筑物Ti的有效起点距离之后,那么在该距离之内的所有点都将对建筑物Ti之后的点产生影响,即根据距离之内的点的值去修改建筑物之后的距离的值。这里我们使用swing[Xi]来表示在Xi之前已进行的划摆次数,同时我们取建筑物Ti的有效起点距离L之内的一个点J(Xj,Y0),从点J开始进行划摆,当划过建筑物Ti之后所达到的点D(Xd,Yd)满足如下的关系式:



  那么swing[Xd]的值按理就应该是swing[Xj]+1,因为从点J进行了一次划摆到达了点D。但是按照前面所说,到达点D的方式可能存在很多种,我们需要的只是其中划摆次数最少的一次,所以在修改swing[Xd]的值之前我们首先应该做的是判断swing[Xd]当前的值与swing[Xj]+1的大小,如果swing[Xj]+1的值小于swing[Xd]的值,那么我们就应该修改它,表示从点J进行划摆到达点D所需要的总共划摆次数是当前最少的。

  从开始我就说明了此次算法采用的是动态规划法的框架,根据前面的运行结果去修改当前的值的做法在修改swing[Xd]的值的时候得到了很好的体现,这也证明了我采用算法是基本正确的。

  既然是动态规划法,那么就一定存在一个状态转移方程,当前值的修改是在满足状态转移方程的条件下进行修改,从前面的分析就可以很容易写出关于swing[Xd]的状态转移方程了。




  得到了状态转移方程之后,我们对每一个建筑物都进行求解得到有效起点距离,然后对距离之内的每一个点按照状态转移方程来修改swing[Xd]的值,当所有的建筑物都考虑之后,那么我们直接看swing[Xn]的值即可。如果swing[Xn]的值为-1则表示不能到达终点,反之得到的一个整数值就是从公寓到塔所划摆的最少次数。

  动态规划法的使用条件是当前的值是前面所有结果共同作用的,动态的去修改的值,因为此题的swing[Xn]的求解满足该条件,所以动态规划法的分析方法是求解此题的关键所在。

源码参考

#include<iostream>
using namespace std;
#include<cmath>
#define MAX 5000
#define MAX_SWING 2000001
int x[MAX],y[MAX],T,N,Distance[MAX], swing[MAX_SWING];
int getCount();
int min(int a,int b)
{
    return a<b?a:b;
}
int main()
{
    cin>>T;
    while(T--)
    {
        cin>>N;
        for(int i=0;i<N;i++){
            cin>>x[i]>>y[i];
            Distance[i] = y[i]*y[i]-(y[i]-y[0])*(y[i]-y[0]);
        }
        for(int j=0;j<MAX_SWING;j++)
            swing[j] = -1;
        cout<<getCount()<<endl;
    }
    return 0;
}
int getCount()
{
    swing[x[0]] = 0;
    for(int i=1;i<N;i++){   
        for(int j = x[i];j>=x[0];j--){
            if(swing[j]==-1)
                continue;
            if(((x[i]-j)*(x[i]-j))>Distance[i])
                break;
            if(swing[2*x[i]-j] == -1)
                swing[2*x[i]-j] = swing[j] + 1;
            else
                swing[2*x[i]-j] = min(swing[2*x[i]-j],swing[j]+1);
            if(2*x[i]-j >= x[N-1] && (swing[x[N-1]] == -1 || swing[x[N-1]] > swing[2*x[i]-j]))
                swing[x[N-1]] = swing[2*x[i]-j];
        }   

    }
    return swing[x[N-1]];
}

在 ABAP 环境中创建 Job Catalog Entry 和 Job Template 的完整实践指南 摘要:本文介绍了SAP BTP ABAP环境中Application Job的云原生解决方案,对比传统后台作业模式。重点阐述了Job Catalog Entry和Job Template两大核心概念,通过库存重估业务场景演示如何实现可调度类、创建Job Catalog Entry及Job Template。文章详细说明了从ABAP类到Job Catalog Entry再到Job Template的完整链路,并分享实际项目中的设计经验和注意事项,帮助开发者将传统后台作业迁移到Application Job框架 阅读详情

相关推荐

告别点不亮!STM32F103驱动HT1621段码屏的常见坑点与调试心得

本文详细解析了STM32F103驱动HT1621段码屏的五大常见问题及解决方案,包括硬件连接、时序控制、RAM地址映射等关键难点。通过实测数据和代码示例,帮助开发者快速排查显示异常问题,提升驱动开发效率。特别针对HT1621与STM32F103的兼容性问题提供了专业调试建议。

weixin_30925435的博客 379

POJ 1925 Spiderman

SpidermanTime Limit:5000MSMemory Limit:65536KTotal Submissions:5858Accepted:1143DescriptionDr. Octopus kidnapped Spiderman's girlfriend M.J. and kept her in the West Tower. Now the hero, Spiderman...

weixin_30871905的博客 166

PSIM+PIL+CCS三剑客:手把手教你搞定DSP28335的软硬件联合调试

本文详细介绍了如何利用PSIM、PIL与CCS三款工具,实现DSP28335的软硬件联合调试。通过搭建兼容环境、从PSIM仿真生成PIL代码,再到实战联合调试与问题诊断,手把手指导开发者构建从虚拟模型到实际硬件的完整验证闭环,有效提升电力电子与电机驱动等领域的开发效率与可靠性。

weixin_29183637的博客 186

动态规划(练习题目)

故事开始以前 最初的那些春天 阳光洒在杨树上 风吹来 闪银光 街道平静而温暖 钟走得好慢 那是我还不识人生之味的年代 我情窦还不开 你的衬衣如雪 盼着杨树叶落下 眼睛不眨 心里像有一些话 我们先不讲 等待着那将要盛装出场的未来 人随风飘荡 天各自一方 在风尘中遗忘的清白脸庞 此生多勉强 此身越重洋 轻描时光漫长低唱语焉不详 数不清的流年 似是而非的脸 把你的故事对我讲 就让我笑出泪光 ...

mike_jun的博客 612

EM4095低频RFID曼彻斯特解码实战:从原理图到MCU代码实现

本文详细介绍了EM4095低频RFID读卡器的设计与实现,从芯片工作原理、天线设计到曼彻斯特解码算法。重点讲解了基于STM32的MCU代码实现,包括定时器捕获、数字滤波和错误处理,为开发125kHz RFID系统提供实用指南。

oil88的博客 714

SVA学习笔记(1)——property基本语法及巧用define与property

巧用define与property,让代码更加灵活

craftsman2018ship的博客 1574

jzoj 3176. 【GDOI2013模拟5】蜘蛛侠

Description 话说世界上有很多超级英雄:蝙蝠侠,蜘蛛侠,超人,名字都写不出来的人等等。在他们之中有一个叫Kickass。今天他想模仿蜘蛛侠,所以他选择了一排高楼来跳。 具体来说,他选择了一列N幢高楼,从左到右标号为1到N。一开始他在第K幢高楼。不幸的是,Kickass能力非常有限,只能跳到向左或向右相邻的高楼,而且他要跳到的楼的高度必须不能大于他现在处在的楼的高度。Kickass不想自己...

Larry1118的博客 419

VTK的编译和部署,配合c++和visual studio2022,VTK开发环境的配置

在官网选择最新的版本下载之后进行解压,然后再里面创建build目录,方便后面使用cmake进行编译。

dz131lsq的博客 3223

阿里云 超级码力在线编程大赛初赛 第1场(第245名)

文章目录1. 比赛结果2. 题目1. 树木规划2. 正三角形拼接3. 大楼间穿梭4. 对称前后缀 1. 比赛结果 通过了 3 题,第245名,进入复赛了,收获 T恤 一件,哈哈。 2. 题目 1. 树木规划 题目链接 描述 在一条直的马路上,有 n 棵树,每棵树有一个坐标,代表它们距离马路起点的距离。 如果每相邻的两棵树之间的间隔不小于 d,那么我们认为这些树是美观的。 请计算出最少移除多少棵树,可以让这些树变得美观。 树木的棵树为 n,1 <= n <= 10^5。 树木的坐标用 tre

Michael是个半路程序员 4537

AUTOSAE软件配置-项目标准配置 (PSC) 导入达芬奇( DaVinci Configurator)

文件是“可拆分的”,这意味着如果格式符合 AUTOSAR 拆分规则,则可以与其他。)是一个ARXML文件,主要由OEM提供,其中包含。)工件,可以作为输入文件导入到达芬奇配置器专业版。导入的参数将以只读方式处理。不允许在多个 ARXML 文件中导入一个。的已存在数据或从输入文件派生的数据。可以作为输入文件导入到另一个。文件会覆盖用户配置的基本。元素和诊断数据预配置。定义 [数据结构]。中,可以导出一个或多个。

m0_49148264的博客 1011

手把手教你学Simulink--基于车联网与智能交通系统的场景实例:基于车联网(V2X)的实时路况信息共享与处理

《基于Simulink的车联网(V2X)实时路况共享系统仿真》摘要:本文详细介绍使用Simulink构建V2X智能交通系统的完整方法。系统包含交通路网建模、V2X通信实现(支持DSRC/C-V2X标准)、多源路况信息融合、动态路径规划等核心模块。通过对比实验,验证V2X可使平均车速提升52%,行程时间缩短34%,显著提升交通效率。文章还探讨了AI预测调度、车辆编队等高级应用,为智慧交通系统开发提供实用参考。所需工具包括Simulink、SimEvents及无线通信工具箱等。

MHD0815的博客 739

[Python3] 超级码力在线编程大赛初赛 第1场题解

P1 树木规划 描述 在一条直的马路上,有 nnn棵树,每棵树有一个坐标,代表它们距离马路起点的距离。 如果每相邻的两棵树之间的间隔不小于 ddd,那么我们认为这些树是美观的。 请计算出最少移除多少棵树,可以让这些树变得美观。 树木的棵树为 nnn,1≤n≤1051 \leq n \leq 10^{5}1≤n≤105。 树木的坐标用 treestreestrees表示,0≤0 \leq0≤ trees i≤109_{i} \leq 10^{9}i​≤109。 最小美观间隔为 ddd,1≤d≤10∘1 \le

其实我是一个艺术家 5493

21、汽车喷漆目标区域识别:机器学习与深度学习的应用

本文探讨了机器学习与深度学习在汽车喷漆目标区域识别中的应用,重点利用卷积神经网络(CNN)提高喷漆效率并减少油漆浪费。通过构建和预处理包含多种汽车类型的数据集,采用ResNet-18、ResNet-50和MobileNet-v2等模型进行训练与评估,结果表明ResNet-50在准确率和鲁棒性方面表现最佳。研究还分析了数据裁剪、标签处理、网络架构差异以及光照和遮挡对识别效果的影响,并提出了系统实现流程。最后,文章展望了多传感器融合、模型优化和场景适应性等未来研究方向,为智能化喷漆工艺提供了技术参考。

5b6n7m8的博客 102

超级码力第一场-第三题-大楼间穿梭 动态规划 单调栈

(补充上篇)超级码力-第三题-大楼间穿梭 动态规划 单调栈 hexo博客:blog.little-star.top 周日-晴-过得跟昨天差不多-今天也参赛还是没进前300-下周还有两次机会-明天师弟师妹军训我们要开始做实践周项目。 提示:题目中“用蛛丝移动到右侧k栋建筑中第一栋比当前位置高的大楼”,应该改为大于等于当前位置的大楼。 单调栈 解答这题的时候用到了一个解题界常说的数据结构——单调栈,即元素只能按单调递增或单调递减的顺序进栈或出栈。 在这里的应用就是可以记录蜘蛛侠使用蛛丝在当前位置能跳到的最远位

weixin_44069607的博客 230

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Jzoj3176 蜘蛛侠

话说世界上有很多超级英雄:蝙蝠侠,蜘蛛侠,超人,名字都写不出来的人等等。在他们之中有一个叫Kickass。今天他想模仿蜘蛛侠,所以他选择了一排高楼来跳。 具体来说,他选择了一列N幢高楼,从左到右标号为1到N。一开始他在第K幢高楼。不幸的是,Kickass能力非常有限,只能跳到向左或向右相邻的高楼,而且他要跳到的楼的高度必须不能大于他现在处在的楼的高度。Kickass不想自己看起来很渣...

dianning8393的博客 217

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

S - Spiderman POJ - 1925 (区间动态规划)

S - Spiderman  POJ - 1925  Dr. Octopus kidnapped Spiderman's girlfriend M.J. and kept her in the West Tower. Now the hero, Spiderman, has to reach the tower as soon as he can to rescue her, using hi...

东风clz 362

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ACM: 动态规划题 poj 1925

Spiderman Description Dr. Octopus kidnapped Spiderman's girlfriend M.J. and kept her in the West Tower. Now the hero, Spiderman, has to reach the tower as soon as he can to rescue her, using his own w

smile_benson 323

poj1925 Spiderman

Spiderman Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 7015   Accepted: 1404 Description Dr. Octopus kidnapped Spiderman's girlfriend M.J. and kept her

樱花满地集于我心,楪舞纷飞祈愿相随 469

较为复杂的动态规划整理

一、POJ 1191 棋盘分割 化简均方差的公式后发现,均方差的平方=(1/n)*(n个矩形总分平方的和)-平均值的平方。 f[k][x1][y1][x2][y2]表示将左上角坐标为(x1,y1)右下角坐标为(x2,y2)的矩形分割k次得到的总分平方和的最小值。 s[x1][y1][x2][y2]表示矩形(x1,y1)(x2,y2)总分的平方。 t1=min(f[k-1][x1][a][x

Azarath Metrion Zinthos 862

(中等)动态规划Hoj 1719 Spiderman

SpidermanMy Tags  (Edit)Source : Beijing 2004 PreliminaryTime limit : 5 secMemory limit : 32 MSubmitted : 78, Accepted : 24Dr. Octopus kidnapped Spiderman's girlfriend M.J. and kept her in the West To

We Can 636

poj 1925_Spiderman(坐标DP)

http://poj.org/problem?id=1925 Description Dr. Octopus kidnapped Spiderman's girlfriend M.J. and kept her in the West Tower. Now the hero, Spiderman, has to reach the tower as soon as he can to

Vision 658

ssoj1338蜘蛛侠 trampolin

题意:有n栋高楼,一个人从第k栋开始跳,每次只能跳到相邻的左右两个房子。有些房子上有蹦床,可以跳到任意高度任意位置的房子。问从k最多能跳几个房子。 思路:1、一路上不会碰到蹦床,求个最长单调不增+反向等高就行。            2、会碰到蹦床:发现碰到一个蹦床就可以到达任意的蹦床,又发现跳到一个蹦床,所有蹦床能到达的区域就都能到达。蹦床能到达的区域:相邻向左向右最长不降。ans=蹦床区域

kaqiur 473

GDOI2016模拟8.15蜘蛛侠

题目 话说世界上有很多超级英雄:蝙蝠侠,蜘蛛侠,超人,名字都写不出来的人等等。在他们之中有一个叫Kickass。今天他想模仿蜘蛛侠,所以他选择了一排高楼来跳。具体来说,他选择了一列N幢高楼,从左到右标号为1到N。一开始他在第K幢高楼。不幸的是,Kickass能力非常有限,只能跳到向左或向右相邻的高楼,而且他要跳到的楼的高度必须不能大于他现在处在的楼的高度。Kickass不想自己看起来很渣渣,所以他

OIerEmeng 625

poj 1925 spiderman

这个题目无疑我被坑惨了,就是因为这个问题丫的一个程序,这么写 cin>>t; while(t!=0){中间略过;t=t-1}就wa。 这么写 cin>>t; while(t--){中间略过;}就AC。一晚上我写了10几遍啊。坑死了。 题目是好题,其实比较好想,这个与之前走过路有关。dp[i]表示跳到i位置的时候最少跳多少次,但是可能有的位置你跳不到,所以开始全部赋值为-1就好了,如果当

kungfu panda 940
上一篇: Git常用命令
下一篇: 约瑟夫环问题
潘建成
博客等级 码龄12年 139粉丝 120原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值