跳石板(通俗易懂的思路和方法)

所用到的知识

STL中的vector容器
动态规划思想
算法中的min

编程思想
  1. 将1 - M个看成一排,为其取个名字叫Slab(数组),并在走之前将这一排石板都初始化为0,然后开始走,每到一块是班上就在这块是石板上写下到这里来的步数,如果脚下踩的这块石板上写的0,说明之前没有来过,那就不可能走到这里,跳过这个石板,重新走
    2. 从起点开始对这一排石板Slab进行遍历,求出可以从这块石板出发走的步数(当前石板对应位置的所有约数)
  2. 到达当前位置就要更新这块石板的上面写的步数,选择之前走的步数和现在走的步数中最小的卸载当前是石板上,如果之前没有到达过这块石板则更新为此时位置的最小步数 + 1,
    4. 知道走到最后一块石版,或者下一次将要走到最后一块石板的时候,看之前有没有到过最后一块石板,如果有,就返回上面的步数(Slab[m]),如果没有就要返回-1

接下来就直接上代码,代码中也有注释

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;//计算该数的公约数
void Divisor(int n,vector<int>& buff)
{for(size_t i = 2; i <= sqrt(n); ++i){if(n%i == 0){buff.push_back(i);//如果这个数不是平方数,那么也将另一个数加入到列表中if(n/i != i)buff.push_back(n/i);}}
}int Jump_Slab(int n, int m)
{//存放从起始位置到每个位置所需要的步数vector<int> Slab(m+1,0);//从n位置走到n位置只需要1步,所以初始化为1Slab[n] = 1;for(size_t i = n; i < m; ++i){//如果这个位置为0,说明不能走到这个位置,跳出此次循环if(0 == Slab[i])continue;//存放i位置可以走的步数vector<int> Jump;Divisor(i,Jump);//Slab[Jump[j] + i]是当前可以走到的位置for(size_t j = 0; j < Jump.size(); ++j){//由位置i出发能到达的点为 stepNum[divNum[j]+i]if(Jump[j] + i <= m && Slab[Jump[j] + i] != 0)//如果到达了这次可以走到的地方没有超过M点,//并且这个位置已经来过,要取从起点到这个位置的步数和现在要更新的步数最少的Slab[Jump[j] + i] = min(Slab[Jump[j] + i], Slab[i]+1);else if(Jump[j] + i <= m)///将可以走的位置更新,由于是在i位置开始走的下一步,//所以走到这里的步数在i位置的基础上加一Slab[Jump[j] + i] = Slab[i]+1;}}if(0 == Slab[m])return -1;elsereturn Slab[m] -= 1;
}int main()
{int n,m;cin >> n >> m;cout << Jump_Slab(n,m) << endl;return 0;
}

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

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

相关文章

使用sar进行性能分析

sar可用于监控Linux系统性能&#xff0c;帮助我们分析性能瓶颈。sar工具的使用方式为”sar [选项] intervar [count]”&#xff0c;其中interval为统计信息采样时间&#xff0c;count为采样次数。 下文将说明如何使用sar获取以下性能分析数据&#xff1a; 整体CPU使用统计各个C…

斯坦福证明神经网络能直接在光学芯片上训练

来源&#xff1a;全球人工智能摘要&#xff1a;据报道&#xff0c;美国斯坦福大学的研究人员已经证明&#xff0c;可以直接在光学芯片上训练人工神经网络。据报道&#xff0c;美国斯坦福大学的研究人员已经证明&#xff0c;可以直接在光学芯片上训练人工神经网络。这一重大突破…

蘑菇阵(动态规划)

题目&#xff1a; 现在有两个好友甲和B&#xff0c;住在一片长有蘑菇的由n * m个个方格组成的草地&#xff0c;A在&#xff08;1,1&#xff09;&#xff0c;B在&#xff08;N&#xff0c;M&#xff09;。现在甲想要拜访B&#xff0c;由于她只想去乙的家&#xff0c;所以每次她只…

用Keil-MDK开发TQ2440裸机程序入门教程——LED流水灯实现

觉得此编文章很详实&#xff0c;故转载之&#xff0c;来自http://www.amobbs.com/thread-5281512-1-1.html 开发板也差不多买了半年了, 以前照着教程用的是软件是ADS,在win7下老是崩溃, 后来才知道ADS早就不提供支持了, ADS的公司怎样怎样了...(此处省略300..) 然后我就捣鼓着怎…

关于量子计算,你应该知道的七个事实

来源&#xff1a;资本实验室摘要&#xff1a;在很多人眼中&#xff0c;量子计算机被认为能够完成经典计算机所不能完成的任务。聚焦前沿科技创新与传统产业升级在很多人眼中&#xff0c;量子计算机被认为能够完成经典计算机所不能完成的任务。事实上&#xff0c;如果量子计算机…

幸运袋子(详解)

题目分析 一个袋子里面有n个球&#xff0c;每个球上面都有一个号码(拥有相同号码的球是无区别的)。如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积。 例如&#xff1a;如果袋子里面的球的号码是{1, 1, 2, 3}&#xff0c;这个袋子就是幸运的&#xff0c;因为…

wcf 例子

开发环境是vs2005 &#xff08;需要安装对wcf和wpf的扩展支持&#xff09;。1建立控制台应用程序作为服务端。///这是接口[ServiceContract(Namespace "http://Microsoft.ServiceModel.Samples")]public interface ICalculator{[OperationContract]double Add(doubl…

机器学习帮助人类找到最硬的过渡金属氮化物

来源&#xff1a;中国科学杂志社摘要&#xff1a;南京大学物理学院孙建教授和王慧田教授领导的研究团队发展了机器学习加速晶体结构搜索的方法&#xff0c;并用其预测了一种超硬的钨氮化合物。机器学习算法在很多领域取得了令人瞩目的进步&#xff0c;从而广受人们关注&#xf…

WEB攻防实战篇,思维导图

转载于:https://www.cnblogs.com/sin4/archive/2012/06/16/2551603.html

二维数组按行和按列遍历的效率

按行遍历的效率大概是是按列遍历的0.5倍 在c语言中&#xff0c;数组在内存中是按行存储的&#xff0c;按行遍历时可以由指向数组第一个数的指针一直向后遍历&#xff0c;由于二维数组的内存地址是连续的&#xff0c;当前行的尾与下一行的头相邻&#xff0c;所以可以直接到下一行…

解读《自适应机器人交互白皮书》:机器人交互需要突破性技术

来源&#xff1a;机器人创新生态摘要&#xff1a;7月11日雷克大会&#xff0c;英特尔中国研究院机器人交互实验室研发总监任海兵在演讲时&#xff0c;就白皮书中的内容进行了重点解读。个人服务机器人在近年来随着人工智能的快速发展开始得到不少关注。个人服务机器人是否真正能…

最长升序子串1231

题目与解析 给定n个数字&#xff0c;在这n个数字中找出最长上升子序列。 那么什么是上升子序列呢&#xff1f; 上升子序列就是在一个数列中递增的部分&#xff0c;不一定是连续的&#xff0c;比如说 图中的24678和24679都是数列24635798的上升子序列 解题思路 就按图上2 4 …

php使用接口实现工厂设计模式

php实现工厂设计模式&#xff0c;使用接口实现&#xff0c;表面上接口没有什么用&#xff0c;因为php是类型自动转换的。实现上使用接口可以约束类的定义&#xff0c;从而实现一致的访问。 接口在php只能起到约束类的定义作用&#xff0c;虽不像c#/java那么直观&#xff0c;但基…

大数据生态圈常用组件(一):数据库、查询引擎、ETL工具、调度工具等

你的闺蜜在减肥&#xff0c;隔壁老王在练腰&#xff0c;你还不赶紧来学习 整理了当年使用过的一些&#xff0c;大数据生态圈组件的特性和使用场景&#xff0c;若有不当之处&#xff0c;请留言斧正&#xff0c;一起学习成长。 组件名属性标签特性使用场景价格成本Mysql 关系型数…

科学革命与科学教科书

来源&#xff1a;《出版科学》2018年第4期摘要&#xff1a;借助科学哲学的反思&#xff0c;加上科学家和出版人的创新实践&#xff0c;一定能够出现既能促进常规科学研究、又能为科学革命做出某些准备的新型科学教科书。《科学革命的结构》托马斯 • 库恩著&#xff0c;金吾伦、…

barcode4j

Barcode4J由Java语言编写而成&#xff0c;可以灵活的生成条形码。它采用Apache License V2.0许可&#xff0c;这使得它很容易在商业中被使用。它可以让您生成各种流行的一维和二维条码&#xff0c;包括DataMatrix 和 PDF417。以各种格式输出&#xff0c;包括SVG, EPS, bitmaps和…

浅析段错误和栈溢出

什么段 我们在学习微机原理的时候就遇到过段&#xff0c;它代表在一个可执行文件中各种的类型信息存放的地方。   正文段&#xff1a;text用于存储指令&#xff1b;   数据段&#xff1a;data用于存储已初始化的全局变量&#xff1b;   bss段&#xff1a;用来存放程序中未…

大数据生态圈常用组件(二):概括介绍、功能特性、适用场景

三更灯火五更鸡&#xff0c;正是男儿读书时。 小编整理了一些常用的大数据组件&#xff0c;使用场景及功能特性&#xff0c;希望对后浪有所帮助。 分类名称简介功能特点使用场景大数据存储HDFSHDFS是一个分布式的文件系统&#xff0c;它具有高度的容错&#xff0c;高吞吐量&am…

物联网可应用于十大行业嘛?

来源&#xff1a;亿欧智库摘要&#xff1a;近些年来&#xff0c;全球经济增长乏力&#xff0c;物联网已变成了各国经济发展的新动力。基于此&#xff0c;亿欧智库近日将发布一份新的报告《2018物联网行业应用研究报告》&#xff0c;报告总结出了物联网的十大应用行业&#xff0…

ubuntu下查看window下文本文件乱码的解决方法

在Ubuntu中&#xff0c;在英文的locate下面查看一些从window系统生成的文本文件&#xff0c;有可能用gedit打开时出现的都是乱码&#xff0c;今天用gedit -h看了一下&#xff0c;里面有一个选项是--encoding&#xff0c;于是在终端中运行 gedit --encodinggbk打开gedit&#xf…