一道面试题

本文探讨了如何通过加减特定数字集合(7,-7,5,-5,12,-12)来实现从数字A到B的转换,并寻找最小的操作次数。提出了四种解题思路:广度优先搜索、动态规划、限制条件下的优化问题及通过扩展欧几里得算法解决的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【来源于BYR】

题目描述:

任意给定两个数字A和B,通过将A和6个数(7,-7,5,-5,12,-12)做加减运算,运算次数不限,每个数可以被使用多次,求从A到B最少要经过多少次运算?
比如:A=0, B=19,从A到B的一条路径为{0,7,19},经过2次运算得到。{0, 5, 12,19}也是符合要求的一条路径,但是需要经过3次运算才可以得到。所以最少要经过2次运算才可以实现从0到19.

 

解题思路:

方案一:广搜

 

方案二:DP从A到B,可以简化为从0到abs(A-B)
设S[i]为从0到i的最短路径
那么 S[i]=min(S[v]+S[i-v])

 

方案三:限制条件: det=12a+7b+5c

目标函数: S=|a|+|b|+|c|
a,b,c若有一个以上为0,则变成二元整数线性规划的问题,好像是经典问题,易解  
如果三者都不为零,则:
如果b,c同号,则一个(7+5)用一个12代替,可以得到更优解
如果b,c异号,则其中必有一个与a异号,(12-7)用5代替,或(12-5)用7代替,可以得到更优解
综上,最优解中,a,b,c肯定至少有一个为0
所以分别做3次二元线性规划,取最优的即可

 

方案四:题意中的12,-12完全没意义,因为可以用(7,5) (-7,-5)代替。
因此只需要考虑(7,-7,5,-5)。 
 A + (7x+5y) = B  ->  7x+5y=(B-A)
ax+by=d
然后扩展欧几里得。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值