Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何在不使用暴力的情况下找到给定不完全数的最小倍数_Algorithm - Fatal编程技术网

Algorithm 如何在不使用暴力的情况下找到给定不完全数的最小倍数

Algorithm 如何在不使用暴力的情况下找到给定不完全数的最小倍数,algorithm,Algorithm,我只想从一个在线评委(URI online judge-2699)那里得到这个编程问题的指导。 给定两个数字,S和N,S是不完整的,因此S可以用?294?的形式给出??如果第一个数字不为零,我需要找到与S具有相同数字且是N的倍数的最小数字。如果不可能,则只返回a*。S最多可以有1000个数字,N

我只想从一个在线评委(URI online judge-2699)那里得到这个编程问题的指导。 给定两个数字,S和N,S是不完整的,因此S可以用?294?的形式给出??如果第一个数字不为零,我需要找到与S具有相同数字且是N的倍数的最小数字。如果不可能,则只返回a*。S最多可以有1000个数字,N<1000

我将描述我的尝试:

  • 蛮力:我尝试每一个数字的组合,得到第一个是N的倍数。当它存在时找到一个解决方案根本不是问题,但是当S很大时发现不存在一个解决方案确实是有问题的,需要无限的时间

  • 蛮力但优化了寻找其余部分的形式:这次尝试我将i位置的数字1的除法的剩余部分保存到一个数组中,因此对于i=3,在v[3]中,我将有1000%N。知道(AB)MOD N=((A MOD N)B)MOD N,可以非常快速地编写一个数组,并优化我计算其MOD的方法。这一尝试确实提高了时间,但这是一次暴力尝试,与前一次的问题相同

  • 使用余数进行递归:例如:如果我有数字 ?294?? 在S中,我得到29400的余数,并计算出需要多少倍数(N-rem),然后我尝试从第一个数字得到所有数字,如果不可能,则减少我想要的数字,然后再试一次,然后转到左侧,尝试使用另一个数字。如果我需要7来达到N,并且第一个数字可以得到5,那么我将尝试在第二个数字内找到2,依此类推

  • 它有一个我在这里没有看到的概念吗?我尝试这个问题已经快3天了,我一直在寻找解决方法,但由于时间的原因,我什么也没有得到


    编辑:感谢您的评论,在思考了一整天这个问题并阅读了大量动态规划之后,我可以找到一种将DP应用于这个问题的方法,我不会具体说明如何应用DP,但关键是要理解DP并找到一种减小问题规模的方法。

    在第一次阅读您的文章之后,在我看来,这就像一个
    动态规划问题。如果你不知道它是什么,请阅读它。如果您已经知道DP是什么,请申请,这应该可以解决您的超期问题。@Shridharkulkarni您将在什么属性上申请DP?如果不是DP,这可能会很棘手。特别是。。我会重读这篇文章,花一点时间,在闲暇时再想一想。