填空题也考DP???
麻了,这是国赛题吧,润去做省赛题去
import math #导入math库
# print(math.gcd(a,b)) #利用函数求解最大公约数
# print(a*b/math.gcd(a,b)) #利用上面的函数求解最小公倍数
n = 2021
# 最大公约数,辗转相除
def gcd(a,b):
if a<b:
a,b = b,a
while (a%b != 0):
a,b = b,a%b
return b
# 最小公约数
def lcm(a,b):
x = a*b
return x//gcd(a,b)
# 2022个无穷大
# float('inf') 无穷大
dp = [float('inf')]*2022
dp[1] = 0
for i in range(1,n+1):
for j in range(i+1,i+22):
if j > 2021:
break
dp[j] = min(dp[j],dp[i]+lcm(i,j))
# 10266837
n = int(input())
n=n/1000
shi = int(n/(60*60)%24)
fen = int(n/60%60)
miao = int(n%60)
print("%02d:%02d:%02d"%(shi,fen,miao))
还是只能完成40%,寄
进步体现在我会使用list.index返回下标了,win
n = int(input())
thisline = [1]
lastline = [1]
sumline = []
for i in range(1750):
thisline = [0 for x in range(i+1)]
for j in range(i+1):
if j == 0:
thisline[0] = 1
elif j == i:
thisline[j] = 1
else:
thisline[j] = lastline[j] + lastline[j-1]
sumline.append(thisline[j])
sumline = sumline
lastline = thisline
del thisline
print(sumline.index(n)+1)
压轴题,不会,但是在网上找到一道往年类似的填空题。用到了排列数
由1对括号,可以组成一种合法括号序列:()。
由2对括号,可以组成两种合法括号序列:()()、(())。
由4对括号组成的合法括号序列一共有多少种?
python中itertools.permutations(iterator)可以生成所有排列情况
import itertools
def check(ls):
if ls[0] == ')':
return False
stack = []
for i in ls:
if i == '(':
stack.append(i)
elif i == ')':
if len(stack) == 0 or stack.pop() != '(':
return False
return True
ls = list(itertools.permutations(['(', ')', '(', ')', '(', ')', '(', ')']))
ans = set()
for i in ls:
if check(i):
ans.add(i)
print(len(ans))
# 14