数学吧 关注:915,627贴子:8,835,039
  • 12回复贴,共1

初始160,单次只能+50;-60或-140,如何在最短步骤归0?

只看楼主收藏回复

初始160,单次只能+50;-60或-140,如何在最短步骤归0?
不能为负,例如90的时候,必须先+50,再-140,不能先-140,再+50
此类问题是否有较为简单的算法方案?


IP属地:江苏1楼2024-05-17 15:26回复
    如果步骤不多,可以试试迭代深搜


    IP属地:福建来自Android客户端2楼2024-05-17 15:39
    回复
      2025-07-30 03:33:55
      广告
      不感兴趣
      开通SVIP免广告
      对50取余即可,应该是5步,两个50,两个-60,一个-140


      IP属地:浙江来自iPhone客户端4楼2024-05-17 17:22
      回复
        感觉为负影响不大吧,因为中途为负的情况可以把顺序调换一下就不出现中途为负了


        IP属地:四川来自Android客户端5楼2024-05-17 17:22
        回复
          由于5和6互素,所以只要输入是10的倍数都有解。这类问题最快的算法是枚举10到270的全部结果,存成一个表,(270不一定是上界不过懒得算了,实际操作中选最大的那个第一步不是-140的数)输入在10到270之间的话就直接查表出结果,输入超过范围就模280,然后查表出结果。


          IP属地:四川来自Android客户端6楼2024-05-17 17:36
          回复
            顺序无所谓,所以可以忽视不能为负的条件。
            动态规划,记160回到原点需要的步数为dp(160)
            那么dp(160)=min{dp(210), dp(100), dp(20)}+1,然后写个Map记录已经算出来的步数作为缓存。要用广度优先搜索,不然会跑到正负无穷去


            IP属地:上海来自Android客户端7楼2024-05-17 17:36
            回复
              楼上说得对,5步就行。


              IP属地:上海来自iPhone客户端8楼2024-05-17 17:37
              回复
                也可以当迭代到超过 ±lcp(50, 60, 140)=2100时候,直接return一个2^31-1,从而保证不采用这个数


                IP属地:上海来自Android客户端9楼2024-05-17 17:38
                回复
                  2025-07-30 03:27:55
                  广告
                  不感兴趣
                  开通SVIP免广告
                  还是广搜好,保证找到最优路径时立刻结束


                  IP属地:上海来自Android客户端10楼2024-05-17 17:39
                  收起回复
                    典型的用很少的空间就能把时间从Θ(n)变成Θ(1)的问题,实际操作中如果需要反复调用肯定用我的方法


                    IP属地:四川来自Android客户端11楼2024-05-17 17:43
                    回复
                      线性规划就能做 顺序不影响 所以非负约束没意义


                      IP属地:浙江来自iPhone客户端12楼2024-05-17 18:10
                      回复