1226 包子凑数
作者:
几毫克的光
,
2024-04-10 21:18:23
,
所有人可见
,
阅读 10
# 1226 包子凑数
# 加上数论的裴蜀定理 a, b 能凑出来的数是gcd(a, b)的整数倍,且不能凑出来的最大数是a*b - a - b
# 状态转移时,可以把有没有的问题转化成有多少的问题,最后遍历,没有的就是不能的,有的不用管他有多少
N = int(input())
n = N
li = []
while(n):
li.append(int(input()))
n -= 1
li.insert(0, 0)
gd = li[1]
def gcd(a, b):
return gcd(b, a % b) if b else a
for i in range(1, N + 1):
gd = gcd(gd, li[i])
if gd == 1:
dp = [[0 for _ in range(10001)] for _ in range(105)]
dp[0][0] = 1
for i in range(1,N + 1):
for j in range(10001):
dp[i][j] = dp[i - 1][j]
if j >= li[i]:
dp[i][j] += dp[i][j - li[i]] # 这里是一个状态的压缩,因为重量可以选无数件
ans = 0
for i in range(10001):
if dp[N][i] == 0:
ans += 1
print(ans)
else:
print("INF")