我需要帮助解决下面的问题。给出一个数字,我必须在数字之间放置符号(+, - ,*,/)以检查是否有任何组合导致100.我们可以将数字分组到多个组中一,但我们不能改变数字的顺序。例如593347→5 +((9 /(3/34)) - 7)= 100,271353→2-(7 *(((1/3)-5 )* 3)= 100,而707409永远不会导致100.我可以理解动态编程是解决方案,但我找不到确切的算法。谢谢。
答案 0 :(得分:2)
让我们暂时简化一下。想象一下这个数字是1234。
第0步:数字是100吗?无
第1步:看1和234。
第2步:看12和34。
每次调用具有特定数字和预期结果的函数时,请存储答案,以便在使用相同参数调用它时再次使用它。
这是该问题的动态编程解决方案草图。
我怀疑这需要大量的计算时间和内存。当问题被限制在+和 - 时,它已经足够困难了。例如,请参阅https://vortexwolf.wordpress.com/2013/12/07/algorithm-plus-minus-result-100/。
答案 1 :(得分:0)
考虑查找Heap's algorithm for permutations。尝试查找语句等于100的排列
编辑:感谢Gassa 它们都是:操作顺序的排列和操作本身的笛卡尔积。