题解 | #二十四点#

二十四点

https://ac.nowcoder.com/acm/contest/84773/H

from math import inf

def main():
    ans = [[inf]*5001 for _ in range(9)]
    for x,dp in enumerate(ans,1):
        for i in range(1,5):
            y = 10**i//9*x
            if y > 5000: break
            dp[y] = i
        for i in range(2,5001):
            dp[i] = min(dp[i],
                min(dp[i-j]+dp[j] for j in range(1,i//2+1)),
                min(dp[i//j]+dp[j] for j in range(1,int(i**0.5+1e-8)+1) if i % j == 0)
            )
    for _ in range(int(input())):
        x,y = map(int,input().split())
        z = ans[x-1][y]
        print(z if z != inf else -1)

main()

全部评论

相关推荐

点赞 评论 收藏
分享
10-31 13:04
南华大学 Java
嵌入式的小白:很多面试,面试前不会去打扰cto的,但一般cto不会在这些小事上刷人,只能说这个cto比较操心,啥重要不重要,紧急不紧急的,估计都会过问,平淡看待吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务