算法 幸运数+爬山

人工智能:用爬山法、模拟退火算法实现八皇后和八数码问题 这里简单介绍下局部搜索算法。局部搜索算法是对一个或多个状态进行评价和修改,而不是系统地从初始状态开始的路径。这些算法适用于关注那些关注解状态而不是路径代价的问题。局部搜索算法从单个当前节点出发,通常只移动到它的临近状态,一般保存搜索路径。局部搜素不是系统化的,但有两个关键的优点。 1. 只用很少的内存——通常是常熟 2. 经常能在系统化算法不适用的很大或无限的状态空间中找到合理的解。爬山法(最陡 阅读详情


这也是京东的 在线编程题。。。

也是发现了详细的解答博客:http://blog.tk-xiong.com/archives/956

内容:

第一题:爬山

时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:
小B曾经酷爱网络游戏,整日通宵达旦的玩游戏,导致身体素质急剧下降,因此下决心痛改前非,远离一切电子产品,并通过远足爬山的方式改变生活方式并提高身体素质。由于担心对身体造成太大的负荷,他总是选择最平坦的路径,并记录每天的行程情况及达到的最高海拔,使得连续两天之间的海拔之差最多为一个单位。不幸的是,在行程结束时,他不小心掉进河里,造成部分记录信息遗失。他想知道自己行程中可能达到的最高海拔,你是否能够帮忙?
输入
输入有若干组,每组的第一行为空格分隔的两个整数n和m,1<=n<=10^8, 1<=m<=10^5,分别表示行程天数以及未遗失的记录数。随后紧跟m行,每行为空格分隔的两个整数d和h,1<=d<=n, 0<=h<=10^8,表示行程的第几天及当天达到的最高海拔。
输出
对每组输入,如果记录是可能的,则在单独的行中输出可能达到的最高海拔,否则输出字符串“IMPOSSIBLE”(不含引号)。

样例输入
8 2
2 0
7 0
8 3
2 0
7 0
8 3
样例输出
2
IMPOSSIBLE

Hint
第一天和最后一天的海拔可以是任何值。

 

题目的意思比较明确,就是小B从网络游戏转行爬山了,但是体力不好,每天只能上一个单位,或者下一个单位,或者不上不下 (假设不是上两个下一个这样的),然后问他最高能到啥位置。

我们看第一组样例:

天号 1 2 3 4 5 6 7 8
最大值1 1 0 1 2 2 1 0 1
最大值2 1 0 1 1 2 1 0 1

这是可能的情况,其他还有很多都不列举了。

然后我直接说解法:

这里的vi 是 <天,高度>

这里的 v是哪一天的号码。

求出来的temp 是 2 0  和  7 0  它们之间能够达到的最大高度。

即 :  (7-2)/2 + (h(7) – h(2))/2 – 即两天相差的天数 和 他们的高度 与最大值的关系。

这里要注意的是… 还得考虑到 2 – 1 和 7 – 0 这样的情况。

这种情况下 我的 公式计算出来的是 2 ,但是实际情况是这样的:

天号 1 2 3 4 5 6 7 8
高度   1 2 3 2 1 0  

所以最大值实际是3…但是因为AC代码是这样的。所以不太敢乱改了。

这样对数据  2-1  7-0 计算出来就是  (7 – 2 + 1 + 0) /2 = 3.

因为我提交的时候,前面可能错误的方法AC了,所以就没有管了,具体用哪个公式…我觉得第二个对。

可能还是题目给的例子不全吧…

 

然后怎么判断Impossible 就是给出的两个数据的高度差值大于天数间距,这种情况下无论如何都不可能达到恰好每天增长或减少1的。嗯…大致就是这个思路

然后注意还要判断首和尾…即从第一天开始 到 给出的第一个数据之间,还有从给出的最后一个数据到最后一天。

原博客是用C写的代码,我用python写的:

def code(k):
    result=""
    while k>0:
        if k % 2 == 0:
            result="7"+result
        else:
            result="4"+result
        k=(k-1)//2

    if k == 0:
        return int(result)

while 1:
    s=raw_input()
    if s=="":
        break

    s=s.strip()
    num = int(s)

    input_list=[]
    for _ in xrange(num):
        s = raw_input().strip()
        d = int(s)
        input_list.append(d)

    for i in range(num):
        print code(input_list[i])

第二题幸运数:

时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB

题目描述:

4和7是两个幸运数字,我们定义,十进制表示中,每一位只有4和7两个数的正整数都是幸运数字。前几个幸运数字是:4,7,44,47,74,77,444,447…

现在输入一个数字k,输出第k个幸运数
输入输出我忘了。
样例输入
3
5
100
10000000
样例输出
74
744747
44774447447477474444447

这题,画出二叉树来就知道了。。。

python代码:

def code(k):
    result=""
    while k>0:
        if k % 2 == 0:
            result="7"+result
        else:
            result="4"+result
        k=(k-1)//2

    if k == 0:
        return int(result)

while 1:
    s=raw_input()
    if s=="":
        break

    s=s.strip()
    num = int(s)

    input_list=[]
    for _ in xrange(num):
        s = raw_input().strip()
        d = int(s)
        input_list.append(d)

    for i in range(num):
        print code(input_list[i])


强化学习实战:小车爬山实验完整例程与算法解析 简介:强化学习通过智能体与环境的交互来优化行为策略,实现特定目标。“小车爬山”是经典强化学习教学案例,模拟动力有限的小车在重力影响下学习如何从山谷驶向山顶。本实验以C++实现的“mountaincar1.cpp”为核心,结合“tiles.C”与“tiles.h”辅助文件,构建状态空间、动作空间和奖励机制,采用Q-learning或SARSA等算法进行策略迭代。通过不断试错,智能体逐步学会在连续空间中做出最优决策。该实验不仅帮助理解强化学习核心概念,还为算法优化与性能测试提供了实践平台。 阅读详情

相关推荐

爬山算法matlab程序

里面是用matlab写的爬山算法的程序,对于初学算法的人有帮助,想用的下载看看。

京东实习生招聘题目解析(一):双端队列的应用

因为前几天开始随意做了一个JD的题目,于是就打算逐步把JD在赛码网上的5-3星难度的题目做完,比较有价值的题目会有比较详细的分析过程,其余的就阐述重点或简单带过即可。因为5星难度题目只有两个,就倒着来做好了。这次的解析包含了3个4星难度题目,并且从其中一个题目来介绍双端队列的概念和使用。 保卫方案 <题目来源: 京东2017秋招 ...

weixin_33946605的博客 237

登山算法和数学形态学代码

这是一个关于登山算法和数学形态学的源代码,可以实现登山算法思想和图像的膨胀腐蚀以及开闭等操作

2017京东爬山编程题

题目描述:小B曾经酷爱网络游戏,整日通宵达旦地玩游戏,导致身体素质急剧下降,因此下决心痛改前非,远离一切电子产品,并通过远足爬山的方式改变生活方式并提高身体素质。由于担心对身体造成太大的负荷,他总是选择最平坦的路径,并记录每天的行程情况及达到的最高海拔,使得连续两天之间的海拔之差最多为一个单位。不幸的是,在行程结束时,他不小心掉进河里,造成部分记录信息遗失。他想知道自己行程中可能达到的最高海拔,你

znb769525443的专栏 732

爬山算法+动态演示

数值算法课程:爬山算法+动态演示。C语言源码+flash开发的动态演示swf。

爬山算法(数值算法)

爬山算法(数值算法) 动态演示

MATLAB初学者入门(17)—— 爬山算法

展示了如何使用爬山算法为机器人在有障碍的环境中规划路径。尽管爬山算法可能陷入局部最优,它在一些简单的情况下仍然提供了快速且有效的解决方案。在复杂或多维度的规划问题中,可以考虑使用更复杂的优化算法,如模拟退火或遗传算法,以提高找到全局最优解的可能性。 在实际应用中,爬山算法可以被用作路径规划和导航系统的一部分,尤其是在响应时间和计算资源有限的情况下。通过适当的优化和调整,这种方法可以有效地应用于自动驾驶车辆、无人机导航以及其他自动化机器人系统的路径优化任务。

贾贾的博客 2746

爬山算法,详细了解爬山算法的内涵

通过一个例子详细了解爬山算法的内涵,更加清楚的了解爬山算法的内涵。

爬山算法求解函数极值(matlab实现)

爬山算法: 爬山算法是一种简单的贪心搜索算法,在算法迭代的过程中,会从当前解的临近空间中随机选取下一个点,如果比当前结果好则会选取这个点作为新的最优解,否则再次进行选取。爬山算法的实现很简单,其主要缺点是在迭代过程中会陷入局部最优解,并无法跳出,因此搜索不到全局最优解。本文将从一个简单的二元函数入手,用Matlab实现爬山算法(Hill climbing)求解函数极值。.........

moon_night_的博客 3093

在Windows11上安装ubuntu版linux系统并实现桌面图形化(WSL)

在Windows11上安装ubuntu版linux系统并实现桌面图形化(WSL),xfce桌面美化、安装google-chrome

NiKoJJ‘s Blog 1万+

MultiOTP Credential Provider避坑指南:从安装到RDP双因素认证的全流程解析

本文详细解析了MultiOTP Credential Provider从安装到实现RDP双因素认证(MFA)的全流程,重点分享了Docker部署、Active Directory集成及网络级认证(NLA)兼容性等环节的实战避坑经验,旨在帮助运维人员高效、稳定地部署离线双因素认证方案,提升Windows远程桌面安全性。

weixin_29255731的博客 642

爬山算法的实例应用

可以看到,在算法刚开始运行时, noise 的值较大,那么当前解的变化趋向于随机移动。但随着 noise 的降低,算法接受较差的解的概率逐渐减小,最终退化成前面的爬山算法。这样做的目的是使算法能够更充分的探索解空间,所以对于非凸优化的问题,模拟退火算法通常能够比爬山法找到更优的解,在实际生活中也有着更加广泛的应用。幸运的是,这个问题确实是一个凸优化问题,证明过程在本题的官方题解里面。下面是一个用爬山算法求解问题的例子,动画中展示了算法的搜索过程,以及目标函数值随迭代步数的变化。

Shan1205的博客 443

ADS重新安装失败排查指南:从注册表清理到环境变量配置

本文详细解析了ADS重新安装失败的常见原因及解决方案,包括注册表残留清理、license路径锁定处理和环境变量配置。通过分步指南和实用技巧,帮助工程师高效解决安装问题,确保软件正常运行。

weixin_42524708的博客 455

第十五届蓝桥杯省赛大学B组(c++)

对第十五届省赛大学B组(C++)进行一次完整的复盘

Cloud_Ivy37的博客 9010

matlab液体湿润模拟,【水文模型】01 三水源新安江模型

目录一、概述1.1 流域概况1.2 产流方式论证1.3 设计基本任务1.4 设计原始资料二、新安江模型2.1 流域划分2.2 产汇流计算2.2.1 蒸散发计算2.2.2 产流计算2.2.3 水源划分2.2.4 汇流计算2.3 模型参数2.3.1 参数物理意义2.3.2 参数率定结果2.4 模拟结果2.4.1 精度统计表2.4.2 计算与实测流量过程线比较三、精度统计与误差分析3.1 精度统计3.2...

weixin_34173656的博客 5327

串并装换器的设计及仿真结果

串/并转换是高速数据流处理的重要技巧之一。串/并转换的实现方法多种多样,根据数据的的顺序和数量要求,可以选用寄存器,双扣RAM,SRAM,FIFO,等实现。对于 数量比较小的设计可以采用移位寄存器完成串/并转换。       在工程中,如何体现串/并转换的设计思想呢? 怎样才能提高系统的处理速度呢 ?       一个简单的串/并转换框架如下图所示,串行输入的数据通过FPGA内部的 n 个移

stubben_bear的专栏 2273

40 | 局部最优:如何逃离?

之前看过一些关于算法方面的书,提到了一些最优化问题。最优化问题在现实中非常常见,比如工程设计中,怎样选择设计参数,使得设计方案能以尽量低的成本预算满足设计要求。而近年来热门的机器学习建模也是一个最优化问题,基于一组已知的数据去构建一个模型,让这个模型去适配未来未知的数据达到最优,然后求解关于这个模型的参数。。而从全局来看,这并不是最优的选择,但算法此时就进入了一种尝试的徘徊状态,这就是局部最优点,但算法并不知道这到底是不是全局最优的。

qq_37756660的博客 1997

【SpringBoot香樟转转】debugDay01

在学黑马程序员的苍穹外卖项目,刚开始学,想用maven编译一下代码,结果报错,找不到符号。本着先理解原则,看着能找到这个变量呀。

m0_72696598的博客 1737

局部最优:如何逃离?

之前看过一些关于算法方面的书,提到了一些最优化问题。最优化问题在现实中非常常见,比如工程设计中,怎样选择设计参数,使得设计方案能以尽量低的成本预算满足设计要求。而近年来热门的机器学习建模也是一个最优化问题,基于一组已知的数据去构建一个模型,让这个模型去适配未来未知的数据达到最优,然后求解关于这个模型的参数。。而从全局来看,这并不是最优的选择,但算法此时就进入了一种尝试的徘徊状态,这就是局部最优点,但算法并不知道这到底是不是全局最优的。

qq_33240556的博客 570

cesium 实现经纬线绘制和经纬度标注

废话不对数直接上线效果图及代码 1.效果图 2.实现代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width,initial-scale=

一碗老面的博客 2569

OpenMM | PDBFixer 用于蛋白质预处理

PDBFixer 用于蛋白质预处理

DrugOne 3006

【随机化贪心】【Kruskal】【NOI2005】小H的聚会

【任务描述】 小 H 从小就非常喜欢计算机,上了中学以后,他更是迷上了计算机编程。经过多年的不懈努力,小 H 幸运的被选入信息学竞赛省队,就要去他日思夜想的河南郑州参加第 22 届全国信息学奥林匹克竞赛(NOI2005)。 小 H 的好朋友小 Y 和小 Z 得知了这个消息,都由衷的为他感到高兴。 他们准备举办一个 party,邀请小 H 和他的所有朋友参加,为小 H 庆祝一下。 经过好几天的调查,

void* ptr = &OI; 3276

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

100皇后问题的遗传算法Python实战:变异驱动与fitness设计

遗传算法是一种基于自然选择机制的全局优化方法,其核心在于通过选择、变异等操作在解空间中定向搜索最优解。对于N皇后这类强约束组合优化问题,传统交叉操作易破坏解的可行性,而聚焦领域特性的变异策略与鲁棒的fitness函数设计,能显著提升收敛效率与稳定性。本文围绕N皇后问题展开,深入解析位置编码下的可行性保障、1/(q+0.001)型适应度函数的数值合理性与梯度特性,并结合Python工程实践,阐明种群演化本质是精英引导的局部爬山过程。内容覆盖初始化、终止判断、性能调优等关键环节,适用于算法落地、课程设计及实际业

weixin_33851604的博客 497

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

微信小程序“幸运咖LuckCup”sign值逆向

“幸运咖LuckCup”sign值逆向

woysihsb的博客 940
上一篇: 算法题 求三个圆的等视角点
下一篇: 在Android中加载并使用opencv的方法
purple_lumpy
博客等级 码龄10年 73粉丝 340原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值