菲波那切数列
class Solution(object):
def fib(self, n):
if n<2:
return n
else:
return self.fib(n-1)+self.fib(n-2)
第N个泰波那契数
class Solution(object):
def tribonacci(self, n)->int:
if n == 0:
return 0
elif n == 1 or n == 2:
return 1
else:
return self.tribonacci(n-3) + self.tribonacci(n-2) + self.tribonacci(n-1)
爬楼梯
class Solution(object):
def climbStairs(self, n):
if n == 1 or n == 2:
return n
else:
return self.climbStairs(n-1) + self.climbStairs(n-2)
使用最小花费爬楼梯
class Solution(object):
def minCostClimbingStairs(self, cost):
n = len(cost)
dp = [0] * (n+1)
for i in range(2,n+1):
dp[i] = min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])
return dp[-1]
买股票的最佳时机
class Solution(object):
def maxProfit(self, prices):
if len(prices) <= 1:
return 0
else:
min_put = prices[0]
max_in = 0
for i in prices[1:]:
min_put = min(min_put,i)
max_in = max(max_in,i-min_put)
return max_in
最长公共子序列
class Solution(object):
def longestCommonSubsequence(self, text1, text2):
dp=[[0 for _ in range(len(text2)+1)] for _ in range(len(text1)+1)]
for i in range(len(text1)-1,-1,-1):
for j in range(len(text2)-1,-1,-1):
if text1[i]==text2[j]:
dp[i][j]=dp[i+1][j+1]+1
else:
dp[i][j]=max(dp[i][j+1],dp[i+1][j])
return dp[0][0]
杨辉三角形
def yanghui(n):
list1 = [[1]]
for i in range(n):
thelist = []
for j in range(len(list1[i])):
if j == 0:
thelist.append(1)
else:
thelist.append(list1[i][j]+list1[i][j-1])
thelist.append(1)
list1.append(thelist)
return list1
n = int(input())
list2 = []
for i in yanghui(n):
for j in i:
list2.append(j)
print(list2)
for i in range(len(list2)):
if list2[i] != n:
pass
else:
print(i+1)
break
节点选择
n = int(input())
l = list(map(int,input().split()))
l.insert(0,0)
print(l)
dic = {}
for i in range(n-1):
a,b = list(map(int,input().split()))
dic[a] = dic.get(a,[])
dic[b] = dic.get(b,[])
dic[a].append(b)
dic[b].append(a)
print(dic)
vis = [0 for _ in range(n+1)]
dp = [[0 for j in range(n+1)] for i in range(2)]
def dfs(u):
vis[u] = 1
for i in range(len(dic[u])):
v = dic[u][i]
if vis[v]:
continue
dfs(v)
dp[1][u] += dp[0][v]
dp[0][u] += max(dp[0][v],dp[1][v])
dp[1][u] += l[u]
dfs(1)
print(max(dp[0][1],dp[1][1]))
耐摔指数
n = int(input("请输入楼的层数:"))
f = [[0 for i in range(n+1)] for _ in range(4)]
for i in range(1,4):
for j in range(1,n+1):
f[i][j] = j #不管情况如何,最坏情况就是楼层数j
for i in range(2,4):
for j in range(1,n+1):
for k in range(1,j):
f[i][j] = min(f[i][j] , max(f[i-1][k-1], f[i][j-k]) +1) #min表示最好,max表示在从最优情况中选出最好的。
print(f[3][n])
K好数
while True:
try:
n = list(map(int, input().split()))
k, l = n[0], n[1]
mod = 1000000007
result = 0
dp = [[0 for i in range(l+1)] for j in range(k)]
#if l == 0 or l == 1:
#print(0)
#else:
for w in range(k):
dp[w][1] = 1
for y in range(2, l + 1):
for x in range(k):
for z in range(k):
if z != x+1 and z != x-1:
dp[x][y] = (dp[x][y]%mod + dp[z][y-1]%mod)%mod
for i in range(1,k):
result = result%mod + dp[i][l]%mod
print(result % mod)
except:
break