从n到m,有-1和*2两种操作。问最少走几步

2018安徽大学计算机机试3--最短的步数 问题描述 输入两个整数n,m,( 0 < n,m<100000)每一次,第一个整数可以执行乘2,、减1、加1三种操 作的任意一种,求n到m至少要多少次这样的操作。 解决思路 每次可以进行三个操作的其中一个,问题可以转化成单源最短路径问题: 每次可以走三个方向,求最短出口。 用队列实现bfs,能比较完善的解决此类问题,但是由于队列需要储存出口之前的所以路径,空间冗余度较大... 阅读详情

从n到m,有-1和*2两种操作。问最少走几步。

这题必须从m来逆向考虑。

#include <>bits/stdc++.h>
using namespace std;
int main(){
	int count =0;
	int m,n;
	cin>>n>>m;
	while(n < m){
		if(m%2)
			m++;
		else 
			m/=2;
		count++;
	}
	cout<<count+n-m<<endl;
}

另一题:从n到m,有-1和+1和*2三种操作。问最少走几步。

后来想了想记忆化搜索真的是行不通的,会重复取状态。

#include <iostream>
#include <vector>
#include <string>
#include <cstring>
#include <cstdio>
#include <map>
#include <set>
#include<queue>
using namespace std;
int vis[200005];
queue<pair<int,int> > q;
int main(){
	int n,m;
	cin>>n>>m;
	int s=0; 
	q.push(make_pair(n,0));
	while(!q.empty()){
		int fr=q.front().first;
		int p=q.front().second; 
		q.pop();
		if(fr>200000||fr<0) continue;
		if(vis[fr]==1) continue;
		vis[fr]=1;
		if(fr==m){
			s=p;
			break;
		}
		q.push(make_pair(fr-1,p+1));
		q.push(make_pair(fr+1,p+1));
		q.push(make_pair(fr*2,p+1));
	}
	cout<<s<<endl;
}

m*n矩阵转换为n*m矩阵 m*n矩阵转换为n*m矩阵,转换分析如下: 假设矩阵为m=3,n=4,(m*n)转换为(n*m), 具体转换: b[0,0] = a[2,0] = 9 b[0,1] = a[1,0] = 5 b[0,2] = a[0,0] = 1 b[1,0] = a[2,1] = 10 b[1,1 阅读详情

相关推荐

M * N 矩阵的骨牌覆盖问题

问题描述有一个 M * N的矩阵,现在需要使用 1 * 2 的骨牌进行覆盖,问总的覆盖方案数有多少? 题目链接:http://hihocoder.com/contest/hiho43/problem/1问题求解 标记骨牌覆盖状态 1, 横向排的骨牌表示: 1 1 2, 纵向排的骨牌表示: 0 1 骨牌状态转移 对于第 i 行与第 i+1 行,其中某段格子状态如下:

二十三小时 2634

给出n, m, 有两种操作,n 减一 和 n 乘以 2,问最少要多少次操作才能把n 变成 m。

https://blog.youkuaiyun.com/castledrv/article/details/45305577 思路: n&gt;m,最优方法是一直减1,返回n-m; n&lt;m分组讨论: 1.m为奇数,让m+1然后除以2; 2.当m为偶数,直接除以2 ...

qq_14962179的博客 3390

M*N棋盘上的K皇后问题

经典的K皇后问题在这里不再复述。 新问题是这样的,在一个M*N的棋盘上,放置K个皇后,其中任意两个皇后不能在同一行,不能在同一列,也不能在同一对角线,问有几种办法放置这K个皇后,废话少说,直接上程序。 #include #include const int MAX_LENGTH = 1000; int M,N,K; //这里为了方便用了全局变量,M表示棋盘的行数,N表示棋盘的列数,K表示

菜鸟の轨迹 5478

笔试题:输入两个数n和m,现在只有两种变换方法,第一种是减1,第二种是*2,问:从n到m最少使用多少步?

输入两个数n和m,现在只有两种变换方法,第一种是减1,第二种是*2,问:从n到m最少使用多少步? 输入:4  5   输出:3 输入:5  12   输出:4 输入:5  14  输出:4 输入:4  6   输出:2   思路为分段改写: 1. n&gt;=m  说明*2根本用不上,只能用减法  步骤就是   n-m 2.如果n&lt;m &amp;&amp; 2n&gt;m 这...

Zlase的博客 2743

设m行n列的网格,求从左上角走到右下角的不同路线条数,只能向右走或向下走,每次走一步

问题描述 如题 解决思路 解决这个问题主要用到了动态规划的思想,那么什么是动态规划呢? 动态规划就是把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解。那么这个问题的各个阶段之间有什么联系呢,我们来一一分析。 1*1网格 首先解释下图中的内容都代表什么含义: 我们一网格的左上角(起点)为坐标原点,向右为m轴,向下为n轴,以每个小网格的边长为单位一,红色的数字代表从原点到该点的...

rocsun01的博客 8965

N*M格子捡苹果DP算法python

直接代码: a = [[5, 8, 5, 7, 1, 8], [1, 3, 2, 8, 7, 9], [7, 8, 6, 6, 8, 7], [9, 9, 8, 1, 6, 3], [2, 4, 10, 2, 6, 2], [5, 5, 2, 1, 8, 8], [5, 9, 2, 6, 8, 3]] vv = [[0] * 6

feihuadao的专栏 3496

求从N到1的最少操作次数(仅允许加减1或除2)

<br />题目等价于:在只允许加、减1或乘2的前提下,求从1变到N的最少操作次数。<br /> <br />分析:任意一个中间数m,若m为偶数,则可能由m-1加1得到,或是由m/2乘2得到;若m为奇数,则可能由m-1加1得到,或是由(m+1)/2经过乘2再减1得到,故可得递推式:<br /> <br />n为偶数: f(n) = min{f(n-1)+1, f(n/2)+1}<br />n为奇数: f(n) = min{f(n-1)+1, f((n+1)/2)+2}<br />初始值: f(0)=f(1)

Kewpie 4229

rk3568 android 11.0 userdata 改为ext4格式

功能:解决设备在恢复出厂设置进行擦除数据的时候卡住问题。 1.修改userdata分区为ext4格式 diff --git a/device/rockchip/common/scripts/fstab_tools/fstab.in b/device/rockchip/common/scripts/fstab_tools/fstab.in index 583e75579d..036336835d 100755 --- a/device/rockchip/common/scripts/fstab_tools/

chgh1306的专栏 2576

从M走到N最少步数

题目描述: 假设一个人站在 X 轴的正半轴上,起始点在 M 点(0 <= M <= 100000),他每次可以向左走一步,向右走一步,或者走到所在坐标乘以2的位置,最终来到 N 点(0 <= N <= 100000)。问:所需的最少步数是几步?(如果不能从 M 走到 N 点,则返回 -1) 举例:M = 2,N = 13,则按照 2 -> 3 -> 6 -> 12 -> 13 的走法,最少步数是 4。 解题思路: 此题可用广搜 + 剪枝的方法,可以理解为一棵三

Lison_Zhu's Blog 657

比Synergy更轻量!Barrier鼠标共享工具实测:5分钟实现Win/Mac/Linux三设备无缝切换

本文实测了开源免费的Barrier鼠标共享工具,详细指导用户如何在5分钟内于Windows、macOS和Linux三台设备间实现一套键鼠的无缝切换。文章对比了其与Synergy的优势,提供了分平台安装、核心服务端-客户端配置、防火墙设置等完整教程,并分享了解决连接问题的关键技巧,是提升多设备办公效率的实用指南。

weixin_29304021的博客 598

HAMi 核心模块与架构设计

HAMi 的架构设计是围绕 Kubernetes 生态系统构建的,通过扩展 Kubernetes 的调度能力和设备管理能力,为用户提供了高效、灵活的异构设备虚拟化和管理解决方案。

北斗云的博客 2552

B. Two Buttons(div2)

题目:http://codeforces.com/contest/520/problem/B 题意:对于给定的数m,n通过将n乘2,或减一,使m等于n,求需要操作的最小步数 思路:开始看数据量比较小,所以想着直接用深搜,其实我感觉代码的问题不大,可是答案一直存在问题。 未AC代码: import java.io.*; import java.math.*; import java.math.BigInteger; import java.util.*; public class Main { static

nankes的博客 337

西门子AI面试问答(STAR法则回答实例)

通过建立良好的沟通渠道、倡导透明和积极的沟通,并建立信任和共享目标的文化,我成功地改善了团队合作的氛围和效果。对于一些存在分歧和冲突的情况,我采用了积极的解决问题的态度,促进双方的沟通和理解,寻找共同的利益点和解决方案。我的成果得到了评委和观众的认可,并为我的学术发展和进一步的科学研究奠定了基础。首先,我主动与团队成员进行一对一的沟通,倾听他们的观点和意见,了解他们在合作中遇到的问题和需求。我还参加了学校组织的科学俱乐部和研究小组,与其他热衷科学的同学一起进行讨论和实验,加深我的理解和实践技能。

kashine的博客 7250

马的遍历:有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步

题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入 一行四个数据,棋盘的大小和马的坐标 输出 一个n*m的矩阵,同一行元素之间用空格分离。代表马到达某个点最少要走几步。不能到达则输出-1。 样例输入 3 3 1 1 样例输出 0 3 2 3 -1 1 2 1 4 思路:利用广度优先搜索(BFS) #include<iostream> #include<queue> #include<cstr

鹅鹅的博客 6213

OFDM时频脉冲形状与子载波正交性的理解

从多载波调制的角度来理解子载波间正交,首先要明确OFDM默认的脉冲成型是时域矩形窗,时域上每个子载波 ej2πfnte^{j2πf_nt}ej2πfn​t 都被一个矩形窗脉冲gT(t)g_T(t)gT​(t)成型。其次,OFDM子载波间隔 等于 OFDM符号周期的倒数,这是子载波正交的条件。 ​ 根据时频脉冲形状,可以从时域上理解如左图(注意是矩形脉冲 乘 复指数),从频域上理解如右图(sinc脉冲 卷 频点)。 ​

weixin_43803202的博客 2215

(十一)随机性与独立性回顾

随机性与独立性回顾

旺旺的碎冰冰~的博客 1018

PHP N*M 网格(表格)中的矩形数量

我们可以说,对于 N*1,将有 N + (N-1) + (n-2) …+ 1 = (N)(N+1)/2 个矩形。对于 N*M 我们有 (M)(M+1)/2 (N)(N+1)/2 = M(M+1)(N)(N+1)/4。N*M 网格可以表示为 (N+1) 条垂直线和 (M+1) 条水平线。如果网格是 3×1,则会有 3 + 2 + 1 = 6 个矩形。所以总矩形的公式将是 M(M+1)(N)(N+1)/4。如果网格是 2×1,则会有 2 + 1 = 3 个矩形。所以 N×2 = 3 (N)(N+1)/2。

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 1万+

解锁 Bootloader 不再难!HyperOS澎湃系统小米与红米手机通用

必要时,可以在工具右上角安装驱动模块,手动安装驱动。解决方法:确保手机升级到最新稳定版,登录同一个小米账号,并在。新机型解锁时需要等待一段时间,通常为 7 天。如果账号安全评分较低,解锁等待时间会更长。如果解锁失败提示权限不足,说明账号存在安全问题。出现这个错误时,通常是因为网络不稳定。如果解锁次数已满,需要等到下个月。解锁后,手机会重启,首次开机会稍微慢一些,等耐心等待即可。按钮,开始解锁过程,注意:解锁会清除手机内所有数据。7次,开启开发者选项。,右键解压到指定文件夹。,使用小米账号登录。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 7227

Python N*M 网格(表格)中的矩形数量

我们可以说,对于 N*1,将有 N + (N-1) + (n-2) …+ 1 = (N)(N+1)/2 个矩形。对于 N*M 我们有 (M)(M+1)/2 (N)(N+1)/2 = M(M+1)(N)(N+1)/4。N*M 网格可以表示为 (N+1) 条垂直线和 (M+1) 条水平线。如果网格是 3×1,则会有 3 + 2 + 1 = 6 个矩形。所以总矩形的公式将是 M(M+1)(N)(N+1)/4。如果网格是 2×1,则会有 2 + 1 = 3 个矩形。所以 N×2 = 3 (N)(N+1)/2。

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 1万+

【kubernetes】kubernetes kubeadm init 错误了 怎么回退?

因为虚拟机设置问题首先报错:然后我根据文章修改了核数。重启后,查看VIP运行所在机器,发现机器没有变化然后重新执行初始化后面报错了根据提供的信息,问题主要集中在 kubelet 未能成功启动控制平面组件,导致初始化过程超时。以下是可能的原因及相应的排查步骤:原因 1:kubelet 未运行或运行状态异常正如错误提示所指出,kubelet 可能未运行或处于不健康状态。请按照提示执行以下命令检查 kubelet 的状态和服务日志:根据输出结果,判断 kubelet 是否正常运行。后续一大堆错误。

九师兄 121

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java~顺时针打印N*N矩阵和顺时针打印N*M矩阵

文章目录顺时针打印N*N矩阵顺时针打印N*M矩阵 顺时针打印N*N矩阵 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 思路 对于N * N矩阵, 我们会发现, 其每一次打印都是一圈上下左右都打印, 那我们可以利用这个特性, 递归遍历其每一圈的第一行, 最右边列, 最下

Shangxingya的博客 1465

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java N*M 网格(表格)中的矩形数量

我们可以说,对于 N*1,将有 N + (N-1) + (n-2) …+ 1 = (N)(N+1)/2 个矩形。对于 N*M 我们有 (M)(M+1)/2 (N)(N+1)/2 = M(M+1)(N)(N+1)/4。N*M 网格可以表示为 (N+1) 条垂直线和 (M+1) 条水平线。如果网格是 3×1,则会有 3 + 2 + 1 = 6 个矩形。所以总矩形的公式将是 M(M+1)(N)(N+1)/4。如果网格是 2×1,则会有 2 + 1 = 3 个矩形。所以 N×2 = 3 (N)(N+1)/2。

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 1万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

真题演练-M*N矩阵转置

题目:编程计算并输出m*n阶矩阵的转置矩阵。其中,m和n的值由用户用键盘输入。已知m和n的值都不超过10。 解法1:用二维数据作为函数参数,实现矩阵转置 #include <stdio.h> #define M 10 #define N 10 void Transpose(int a[][N],int b[][M],int m,int n); void InputMatrix(int ...

jqq125的博客 4866

(经典dp) 骨牌问题 2*n 3*n n*m

3687. 骨牌 骨牌覆盖 - 51Nod 1031 1032 1033 1034 骨牌铺方格- 2046 Mondriaan's Dream- 1400 2411 -- Mondriaan's Dream

cuber-lotus的博客 1593

动态规划-类数塔问题(在一个n* m的方格中,m为奇数,放置有n*m个数)

题目 在一个n* m的方格中,m为奇数,放置有n*m个数,如图4-18所示。方格中间的下方有一人,此人可按照5个方向前进但不能越出方格,如图4-19所示。人没走过一个方格必须取此方格中的数。要求找到一条从底到顶的路径,使其数相加之和为最大。输出最大和的值。 问题分析: 如果用贪婪算法可能找不到真正的最大和。要找到最大和的前提条件就是能看到整个方格的情况。因此需要采用动态规划的算法实现此问题。 算...

笑卜的小屋 8730

C# N*M 网格(表格)中的矩形数量

我们可以说,对于 N*1,将有 N + (N-1) + (n-2) …+ 1 = (N)(N+1)/2 个矩形。对于 N*M 我们有 (M)(M+1)/2 (N)(N+1)/2 = M(M+1)(N)(N+1)/4。N*M 网格可以表示为 (N+1) 条垂直线和 (M+1) 条水平线。如果网格是 3×1,则会有 3 + 2 + 1 = 6 个矩形。所以总矩形的公式将是 M(M+1)(N)(N+1)/4。如果网格是 2×1,则会有 2 + 1 = 3 个矩形。所以 N×2 = 3 (N)(N+1)/2。

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 1万+
上一篇: hznu1865 判断点是否存在一条射线经过A圆而不经过B圆
下一篇: zoj3620 限定时间内从a点到b点的收益最大值(状压+搜索)
ccyy-
博客等级 码龄12年 31粉丝 244原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值