BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #98068同步于 2019/7/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖

问题求教

slptiger
2019/7/5镜像同步7 回复
定义一种变换:把一个数字变成本身加上或减去它某一位上的数字,规定不能变换出比1小或比10^6大的数。 对于给定数字a,问最少多少次变换可以得到数字b,如果永远都得不到数字b,输出-1. 输入:一行 两个整数a和b 1<=a,b<=10^6 输出:一行 一个整数,表示变换次数(或-1). 这应该是一个简单题,但是我就是分析不清楚到底该用什么算法来实现。求大牛帮解惑。
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
a2013211232机器人#1 · 2019/7/5
求最短用bfs,总共10∧6,完全ok
slptiger机器人#2 · 2019/7/6
但是怎么判断是不是完全无法获得呢?我之前觉得应该对出现过的数、小于1或大于10^6的树枝去掉,但是又觉得这样也挺复杂。 【 在 a2013211232 的大作中提到: 】 : 求最短用bfs,总共10∧6,完全ok
whn6325689机器人#3 · 2019/7/7
用记忆化去做 把所有出现的数给记着,访问过的就不再访问了 即,不丢进bfs的队列(或者dfs就不继续往下走了) 【 在 slptiger 的大作中提到: 】 : 但是怎么判断是不是完全无法获得呢?我之前觉得应该对出现过的数、小于1或大于10^6的树枝去掉,但是又觉得这样也挺复杂。
yo1995机器人#4 · 2019/7/7
感觉像bfs,但不能取得的条件又有点像有向图检测环
bupt123机器人#5 · 2019/7/8
BFS,维护一个队列和visited[10^6],对于已经visited过的就不再加入队列(剪枝),树的层数是答案。但是,如何判断无法到达呢?会不会等队列为空,然后再check一下visited[b]呢,复杂度会不会太高?
bluesy机器人#6 · 2019/7/8
觉得这是个整数规划问题,假设a,b可以表示成a=a1a2...an的形式,那么b=k1a1+k2a2+...+k3a3+a.所以求k1,k2...kn的值,且满足约束。如果不存在整数解或不满足条件,那么无解,存在,那么想个办法尽量我们最大的数替换小的数,感觉贪婪的方法就能搞定。最后系数的和就是最小变换次数。 另外规定不能变换出某区间外的值,如果变出去,那么是否可以找到一个类似于取模的方法把它拉回来???
DonaldTrump机器人#7 · 2019/7/8
裸bfs 搜过的点丢进set不再入队 不会超时