蓝桥杯-每日一练02

题目描述:(走迷宫)

给定一个 N×MN×M 的网格迷宫 GG。GG 的每个格子要么是道路,要么是障碍物(道路用 11 表示,障碍物用 00 表示)。

已知迷宫的入口位置为 (x1,y1)(x1​,y1​),出口位置为 (x2,y2)(x2​,y2​)。问从入口走到出口,最少要走多少个格子。

输入描述:

输入第 11 行包含两个正整数 N,MN,M,分别表示迷宫的大小。

接下来输入一个 N×MN×M 的矩阵。若 Gi,j=1Gi,j​=1 表示其为道路,否则表示其为障碍物。

最后一行输入四个整数 x1,y1,x2,y2x1​,y1​,x2​,y2​,表示入口的位置和出口的位置。

1≤N,M≤1021≤N,M≤102,0≤Gi,j≤10≤Gi,j​≤1,1≤x1,x2≤N1≤x1​,x2​≤N,1≤y1,y2≤M1≤y1​,y2​≤M。

输出描述:

输出仅一行,包含一个整数表示答案。

若无法从入口到出口,则输出 −1−1。

输入与输出样式:

 

 代码显示:

import os
import sys
from collections import deque
#deque队列
n, m = map(int, input().split())
M = [list(map(int, input().split())) for i in range(n)]
data = list(map(int, input().split()))
#入口与出口的位置;data[0],data[1]入口;data[2],data[3]出口
q = deque([(data[0] - 1, data[1] - 1, 0)])  #矩阵、列表坐标都是从0开始
while q:
    x, y, z = q.popleft()
    #popleft()表示移除最左边的元素;z表示走的格子数
    if x == data[2] - 1 and y == data[3] - 1:
      #本身就在出口上
        print(z)
        break

    for i, j in [[1, 0], [-1, 0], [0, 1], [0, -1]]:
        a, b = x + i, y + j
        if 0 <= a < n and 0 <= b < m and M[a][b] == 1:  
            M[a][b] = 0
            q.append([a, b, z + 1])
            #z表示走的格子数
if x != data[2] - 1 and y != data[3] - 1:
  #如果x,y不与出口一致,则表示无法从入口到出口,输出-1
    print(-1)

题目描述:(背包)

小明有一个容量为 V 的背包。

这天他去商场购物,商场一共有 NN 件物品,第 ii 件物品的体积为 wiwi​,价值为 vivi​。

小明想知道在购买的物品总体积不超过 VV 的情况下所能获得的最大价值为多少,请你帮他算算。

输入描述:

输入第 11 行包含两个正整数 N,VN,V,表示商场物品的数量和小明的背包容量。

第 2∼N+12∼N+1 行包含 22 个正整数 w,vw,v,表示物品的体积和价值。

1≤N≤1021≤N≤102,1≤V≤1031≤V≤103,1≤wi,vi≤1031≤wi​,vi​≤103。

输出描述:

输出一行整数表示小明所能获得的最大价值。

输入与输出样式:

 

 代码显示:

import os
import sys

# 请在此输入您的代码
n, v = map(int, input().split())
a = [list(map(int, input().split())) for i in range(n)]
dp = [0] * (v + 1)
for i in range(n):
    for j in range(v, a[i][0] - 1, -1):
        dp[j] = max(dp[j], dp[j - a[i][0]] + a[i][1])
print(dp[-1])
 

 题目描述:(回文判定)

给定一个长度为 n 的字符串 S。请你判断字符串 S 是否回文。

输入描述:

输入仅 1行包含一个字符串 S。

1≤∣S∣≤1061≤∣S∣≤106,保证 S 只包含大小写、字母。

输出描述:

若字符串 S 为回文串,则输出 Y,否则输出 N。

代码显示:

import os
import sys

# 请在此输入您的代码
s = input()
print("Y" if s == s[::-1] else "N")

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值