这道题刚开始做时一脸懵逼,知道正解后发现竟是如此之水。。。
60分:
BFS枚举,设D[i,1]表示当前的a,D[i,2]表示当前的b,D[i,3]表示当前进行了D[i,3]次操作。
之后再加优化:
①:如果当前算出的a或b超过了N,就已经不成立了。
②:如果当前进行的操作已经超过了之前算出的最小值,无论对错都可以不用继续进行了。
BFS因为数据量过于庞大,所以要么数组爆炸要么答案错误。
100分:
既然用顺推不行,我们就用逆推法。
因为题目要满足的是a和b中至少有一个达到N,所以其中一个一定是N,另一个就是1~N中的一个数。
把公式反过来看,我们可以用大数不断去减去小数,知道两个数都为1或其中一个小于1为止。
之后统计计算的次数,取最小的值即可。