蓝桥杯刷题--python-24

0地图 - 蓝桥云课 (lanqiao.cn)

from math import *

import sys

from functools import lru_cache

# sys.setrecursionlimit(100000)

n, m, k = map(int, input().split())

a = [input() for i in range(n)]

dr = [(0, 1), (1, 0)] 

cnt = 0

@lru_cache(maxsize=None)

def dfs(x, y, v, depth):

    """

    v: 方向

    depth: 改变多少次

    """

    cnt = 0

    

    if depth > k:

        return 0

    if x >= n or y >= m:

        return 0

    if a[x][y] == '#':

        return 0

    if x == n - 1 and y == m - 1:

        # cnt += 1

        return 1

    

    for i in range(2):

        xx, yy = x + dr[i][0], y + dr[i][1]

        cnt += dfs(xx, yy, i, depth + (i != v))

    return cnt

if a[0][1] == '.':

    cnt += dfs(0, 1, 0, 0)

if a[1][0] == '.':

    cnt += dfs(1, 0, 1, 0)

print(cnt)

 1355. 母亲的牛奶 - AcWing题库

from collections import deque
A,B,C=map(int,input().split())
st=[[[False for _ in range(21)] for _ in range(21)] for _ in range(21)]

class Node:
    def __init__(self,a,b,c):
        self.a=a
        self.b=b
        self.c=c
def bfs():
    q=deque()
    q.append(Node(0,0,C))
    st[0][0][C]=True
    W=[A,B,C]


    while q:
        t=q.popleft()
        for i in range(3):
            for j in range(3):
                if i!=j:
                    w=[t.a,t.b,t.c]
                    r=min(w[i],W[j]-w[j])
                    w[i]-=r
                    w[j]+=r
                    if not st[w[0]][w[1]][w[2]]:
                        st[w[0]][w[1]][w[2]]=True
                        q.append(Node(w[0],w[1],w[2]))
                    
bfs()
for c in range(C+1):
    for b in range(B+1):
        if st[0][b][c]:
            print(c,end=" ")
            break
            
            
    
    

4957. 飞机降落 - AcWing题库

 


class Node:
    def __init__(self,t,d,l):
        self.t=t
        self.d=d
        self.l=l
t=int(input())
for _ in range(t):
    n=int(input())
    ans=[]
    for _ in range(n):
        t,d,l=map(int,input().split())
        ans.append(Node(t,d,l))
    used=[0 for _ in range(n)]
    def dfs(index,last):
        if index==n:
            return True
        for i in range(n):

                t,d,l=ans[i].t,ans[i].d,ans[i].l
                if  not  used[i] and t+d>=last:
                    used[i]=1
                    if (dfs(index+1,max(last,t)+l)):
                        return True

                    used [i]=0
        return False
    if dfs(0,0):print("YES")
    else:print("NO")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芝士小熊饼干

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值