noj加1乘2平方
广度优先搜索典例
00 题目
描述:
最简单的队列的使用
#include <iostream>
#include <queue>
using namespace std;
queue<int> q1;
int main()
{
int temp, x;
q1.push(5);//入队
q1.push(8);//入队
temp = q1.front();//访问队首元素
q1.pop();//出队
q1.empty();//判队列是否为空
q1.back();//返回队尾元素
q1.size();//返回队列长度
}
给定两个正整数m、n,问只能做加1、乘2和平方这三种变化,从m变化到n最少需要几次
输入:
输入两个10000以内的正整数m和n,且m小于n
输出:
输出从m变化到n的最少次数
输入样例:
1 16
输出样例:
3
01 思路0
01-1 类型
虽然看上去感觉有一些无处下手,但是实际上就是一个三叉树,并且要去去找 到达目标节点 的最低高度。
这个图转自加1乘2平方题解
很明显,这是个广搜典型题。
01-2 算法
以初始数字(如1)当作根结点,入队,出队,产生三个子节点next,对子节点筛选符合条件的继续进队
关于三个子结点的产生,可以设置标志位标记为0,1,2
0->当前值+1
1->当前值*2
2->当前值*当前值
对应我的change函数
对next值进行判断
当next为终点数字时,就停止,返回高度(高度需要变量来记)
当next>终点数字时,不再入队。
当next<终点数字时,入队,方便下一步找它的子节点。
在bfs主控函数中把队列走完,就能解决问题。
输出
02 代码0
1 //方法2
2 //按照题目要求使用队列,相应算法是广搜
3 #include<iostream>
4 #include<queue>
5 using namespace std;
6
7 queue<int> q;
8 int m,n;
9 int step[10000];
10 int used[10000];
11
12 int bfs();//广度优先搜索
13 int change(int now, int i);//三种变换
14 bool istarget(int now, int next);
15 //判断是否达到目标数字
16 int main(){
17 cin >> m >> n;
18 //始末位置
19 q.push(m);
20 //m入队
21 cout << bfs() << endl;
22 return 0;
23 }
24 int bfs(){
25 int next;
26 while(!q.empty() ){
27 int now = q.front();
28 q.pop();
29 used[now]=1;
30 for(int i=0; i<3; i++){
31 next = change(now,i);
32 //生成当前节点的下一节点(一共三个)
33 if(istarget(now, next)){
34 return step[next];
35 }//如果就达到目标,就返回走了几步,由于使用广搜,就是最短路径
36 }
37 }
38 return 0;//这点很重要,虽然code永远到不了这里
39 }
40
41 bool istarget(int now,int next){
42 if(next<=n && used[next]==0){//确保子节点未超过目标值且未被访问过
43 used[next]=1;
44 step[next] = step[now] + 1;//从当前到子节点需+1
45 //核心判断
46 if(next == n){
47 return true;
48 }
49 else{
50 q.push(next);
51 //如果不是就吧这个节点当成普通节点放入队列
52 }
53 }
54 return false;
55 }
56
57 int change(int now, int i){
58 if(i==0) return now+1;
59 if(i==1) return now*2;
60 else return now*now;
61 }
03 思路1
03-1 类型
动态规划,更为简洁,只需要一个main函数和两个指针
03-2 算法
从起始数字开始,我设置一个行走位逐个去走到终点
对i进行讨论
先设置基准步伐,比较i的路经长度和i-1的路径长度+1
当i为偶数,比较到达i的路径长度和i/2的路径长度+1
当i为平方数,(可以提前设置一个int 的i的根号,当t*t==i即为这个条件)比较到达i的路径长度和t的路径长度+1
算法原理,因为i是从m开始走的,所以天然不需要循环,只需不断地调用之前的结果进行比较就能得到新的结果,这就是动态规划的魅力所在。算法时间复杂度为O(m-n).
04 代码1
1 //加1乘2平方
2
3 #include<stdio.h>
4 #include<string.h>
5 #include<iostream>
6 #include<algorithm>
7 #include<cmath>
8 using namespace std;
9 const int maxn = 10000+50;
10 int dp[maxn],m,n;
11
12 //min函数内置了
13 int main(){
14 cin>>m>>n;
15 memset(dp,0x3f3f3f,sizeof(dp));
16 dp[m] = 0;
17 for(int i = m+1; i <= n; i++){
18 int t = sqrt(i);
19 dp[i]=min(dp[i],dp[i-1]+1);
20 if(i%2==0){
21 dp[i] = min(dp[i], dp[i/2]+1);
22 }
23 if(t*t == i){
24 dp[i] = min(dp[i],dp[t]+1);
25 }
26 }
27 cout << dp[n] << endl;
28 return 0;
29 }
noj加1乘2平方的更多相关文章
- Noj - 在线强化训练4
状态 题号 竞赛题号 标题 × 1092 A 童年的回忆——计算24 × 1145 B 求图像的周长 × 1144 C 农场灌溉问题 × 1202 D 数独游戏 × 1243 E 循环赛日程表 × 1 ...
- js原生方法传参的细节(面试必问)
废话不说,直接上题. slice(),接收两个参数,第一个为开始index(从0开始),第二个为结束的index(也是从0开始,但是不包括index本身,只到index-1).返回值是截取的数组,原数 ...
- 2078 Problem H Secret Message 中石油-未提交-->已提交
题目描述 Jack and Jill developed a special encryption method, so they can enjoy conversations without wo ...
- Bzoj 3781: 小B的询问 莫队,分块,暴力
3781: 小B的询问 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 426 Solved: 284[Submit][Status][Discuss ...
- 【TensorFlow篇】--Tensorflow框架初始,实现机器学习中多元线性回归
一.前述 TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理.Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,T ...
- 委托学习总结(一)浅谈对C#委托理解
初入社会,对于我这个初级程序员来说要学的东西实在太多了,公司最近在做一个winform框架开发的桌面应用程序,众所周知,winform也好,webform也好,里面随处可见的事件驱动,有事件,当然也少 ...
- [jzoj]4216.【NOIP2015模拟9.12】平方和
Link https://jzoj.net/senior/#main/show/4216 Description 给出一个N个整数构成的序列,有M次操作,每次操作有一下三种: ①Insert Y X, ...
- 190320运算符&数据类型
一.运算符 1.算术运算符 + 加 - 减 * 乘 / 除 ** 平方 // 整除 % 取余 2.比较运算符 == 等于 > 大于 < 小于 <= 小于等于 >= 大于等于 ! ...
- hash冲突解决和javahash冲突解决
其实就是四种方法的演变 1.开放定址法 具体就是把数据的标志等的对长度取模 有三种不同的取模 线性探测再散列 给数据的标志加增量,取模 平方探测再散列 给数据的标志平方,取模 随机探测再散列 把数据的 ...
随机推荐
- 源码解析Spring AOP的加载与生效
本次博主主要进行Spring AOP这里的解析,因为在工作中使用后,却不知道背后的实现原理并在使用的过程中发现了一些认知缺陷,所以决定写这么一篇文章以供大家参考参考,进入正题. 本次博主使用了@Asp ...
- 前后端数据交互(三)——ajax 封装及调用
有很多框架已经将 ajax 封装,需要的时候只需要调用就好,比如 jquery 是最常用的.我们为什么还需要学习 ajax 的封装呢?首先加强我们对ajax的认识,其次如果只是因为ajax请求需要引入 ...
- SprinBoot-SpringData-整合
目录 SpringData 整合JDBC JDBCTemplate 整合Druid 配置数据源 配置Druid数据源监控 整合MyBatis 整合测试 整合Redis 测试整合 序列化配置 自定义re ...
- Mybatis-基本学习(下)
四,MAP的使用--超常用 思考:多表连接查询怎么做?---MAP的好处!---返回List
- 小白也能看懂的dubbo3应用级服务发现详解
搜索关注微信公众号"捉虫大师",后端技术分享,架构设计.性能优化.源码阅读.问题排查.踩坑实践. 本文已收录 https://github.com/lkxiaolou/lkxiao ...
- 任由文字肆意流淌,更自由的开源 Markdown 编辑器
对于创作平台来说内容编辑器是十分重要的功能,强大的编辑器可以让创作者专注于创作"笔"下生花.而最好取悦程序员创作者的方法之一就是支持 Markdown 写作,因为大多数程序员都是用 ...
- 企业快速开发平台Spring Cloud+Spring Boot+Mybatis+ElementUI 实现前后端分离
鸿鹄云架构一系统管理平台 鸿鹄云架构[系统管理平台]使用J2EE技术来实施,是一个大型分布式的面向服务的JavaEE体系快速研发平台,基于模块化.服务化.原子化.热部署的设计思想,使用成熟领先的无商业 ...
- Insecure CAPTCHA (不安全的验证码)
dvwa不能正常显示,需要在配置文件中加入谷歌的密钥: $_DVWA[ 'recaptcha_public_key' ] = '6LfX8tQUAAAAAOqhpvS7-b4RQ_9GVQIh48dR ...
- qGPU on TKE - 腾讯云发布下一代 GPU 容器共享技术
背景 qGPU 是腾讯云推出的 GPU 共享技术,支持在多个容器间共享 GPU卡,并提供容器间显存.算力强隔离的能力,从而在更小粒度的使用 GPU 卡的基础上,保证业务安全,达到提高 GPU 使用率. ...
- http升级https遇到的问题
1. 功能请求失效: 可能是链接为http请求,导致出现问题 2.浏览器网址左边出现黄色感叹号: 这是由于网页中存在http的图片链接,需要根据实际情况修改; 3.将网页内的http请求变为https ...