3736
这个就是单纯的找到最大值,然后减去所有其他值了
红魔馆的馆主
因为是要直接在结尾加数字,所以最多也就加18次
每个位置上是0-9,10种可能,直接dfs暴力搜索,是18^10的复杂度,应该是满足条件的
再加上剪枝,
首先想到的剪枝是最后一位,只能填0或5,剪掉其他8种可能
每个数构造完成后,就要验证是否为495的倍数
复杂度应该还是很高
应该有数学方法
自解
对于搜索,
dfs,
看当前长度是否超过了18,如果是就return
否则,从0遍历到9
如果是0或5,就校验一次,如果校验过了,那就直接return掉
并最后输出string.substr
DEBUG1
就是说最大深度来作为参数限制,
疑问1——重复搜索代价?
不过这样会不会有效率上的问题?即最大深度为1时,如果发现没结果,那么到最大深度为2,需要再次从0层开始找,即又过了一遍第一层,如果最大深度为n,那么第一层最坏情况下会过n次,整体最坏会多过n(n-1)/2层?
DEBUG1.1
关键BUG
、
DE完后
AI版
AI解
疑问1
为什么495<1000就一定能构造出答案?这是什么原理?
或者简明直接一些,对于任意一个数n,要求加x来得到最近的关于y的余数,那么x必定在0到y之间
如果是直接往数位里添加的话,如果y的位数为a的话,那么在a+1位以内就可以;
疑问1.2
但依然存在问题,N=n×1000+s,添加的数是s,s是495的倍数,但加上n*1000后,又如何能保证这个和是495的倍数?