dp打表

魔法棒

https://www.nowcoder.com/practice/976bd95dda8f4430b512d0c39bd9f106

思路:用dp打表找规律,可以发现在x > 14时,结果都为True;在x <= 14时,结果不都为True。那么我们就在x <= 14的时候用dp表判断一下,否则直接输出Yes即可

代码:

import sys
input = lambda: sys.stdin.readline().strip()

import math
inf = 10 ** 18

def I():
    return input()

def II():
    return int(input())

def MII():
    return map(int, input().split())

def GMI():
    return map(lambda x: int(x) - 1, input().split())

def LI():
    return input().split()

def LII():
    return list(map(int, input().split()))

def LFI():
    return list(map(float, input().split()))

fmax = lambda x, y: x if x > y else y
fmin = lambda x, y: x if x < y else y
isqrt = lambda x: int(math.sqrt(x))

'''

'''

def dp_table(max_n):
    dp = [False] * (max_n + 1)
    dp[1] = True
    for i in range(2, max_n + 1):
        k = 1
        while k * k <= i:
            j = i - k * k + 1
            if 1 <= j <= i and dp[j]:
                dp[i] = True
                break
            k += 1
    return dp

dp = dp_table(100)

# for i in range(1, 101):
#     print(f"x={i}: {dp[i]}")

def solve():
    x = II()
    if x <= 14:
        print("Yes" if dp[x] else "No")
    else:
        print("Yes")

# t = 1
t = II()
for _ in range(t):
    solve()
#每日一题挑战#
全部评论

相关推荐

2025-12-15 14:25
云南大学 Java
lei22:入职可能会看学信网,最好别伪装,这个简历找实习肯定是够的,肯定会有收 28 届实习生的公司的,多投就行
点赞 评论 收藏
分享
2025-11-07 14:38
已编辑
东华理工大学 Java
糠茹频频影:寒假实习hc还是有的,继续投吧,至少1000+沟通以上
Java求职圈
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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