题目描述:(走迷宫)
给定一个 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")