【思特奇杯·云上蓝桥-算法集训营】第三周

菲波那切数列

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值