🐻作者: 芝士小熊饼干
📖 系列专栏: 数据结构-蓝桥杯-算法⭐
💪坚持天数:6天🤖
跳跃⭐
小蓝在一个 n 行 m 列的方格图中玩一个游戏。
开始时,小蓝站在方格图的左上角,即第 11 行第 11 列。
小蓝可以在方格图上走动,走动时,如果当前在第 r 行第 c 列,他不能走到行号比 r 小的行,也不能走到列号比 c 小的列。同时,他一步走的直线距离不超过 33。
例如,如果当前小蓝在第 33 行第 55 列,他下一步可以走到第 33 行第 66 列、第 33 行第 77 列、第 33 行第 88 列、第 44 行第 55 列、第 44 行第 66 列、第 44 行第 77 列、第 55 行第 55 列、第 55 行第 66 列、第 66 行第 55 列之一。
小蓝最终要走到第 n 行第 m 列。
在图中,有的位置有奖励,走上去即可获得,有的位置有惩罚,走上去就要接受惩罚。奖励和惩罚最终抽象成一个权值,奖励为正,惩罚为负。
小蓝希望,从第 11 行第 11 列走到第 n 行第 m 列后,总的权值和最大。请问最大是多少?
n,m=map(int,input().split())
map=[list(map(int,input().split())) for i in range (0,n)]
Num = [(0,1),(0,2),(0,3),(1,0),(1,1),(1,2),(2,0),(2,1),(3,0)]
for x in range(n):
for y in range(m):
tmp=[]
for nx,ny in Num:
lx=x-nx
ly=y-ny
if(lx>=0 and ly>=0 and lx<n and ly<m):
tmp.append(map[lx][ly])
if len(tmp)!=0:
map[x][y]+=max(tmp)
print(map[n-1][m-1])
超市购物⭐
小明刚刚找到工作,老板人很好,只是老板夫人很爱购物。老板忙的时候经常让小明帮忙到商场代为购物。小明很厌烦,但又不好推辞。
这不,大促销又来了!老板夫人开出了长长的购物单,都是有打折优惠的。
小明也有个怪癖,不到万不得已,从不刷卡,直接现金搞定。
现在小明很心烦,请你帮他计算一下,需要从取款机上取多少现金,才能搞定这次购物。
取款机只能提供
100
100 元面额的纸币。小明想尽可能少取些现金,够用就行了。 你的任务是计算出,小明最少需要取多少现金。
以下是让人头疼的购物单,为了保护隐私,物品名称被隐藏了。
**** 180.90 88折
**** 10.25 65折
**** 56.14 9折
**** 104.65 9折
**** 100.30 88折
**** 297.15 半价
**** 26.75 65折
**** 130.62 半价
**** 240.28 58折
**** 270.62 8折
**** 115.87 88折
**** 247.34 95折
**** 73.21 9折
**** 101.00 半价
**** 79.54 半价
**** 278.44 7折
**** 199.26 半价
**** 12.97 9折
**** 166.30 78折
**** 125.50 58折
**** 84.98 9折
**** 113.35 68折
**** 166.57 半价
**** 42.56 9折
**** 81.90 95折
**** 131.78 8折
**** 255.89 78折
**** 109.17 9折
**** 146.69 68折
**** 139.33 65折
**** 141.16 78折
**** 154.74 8折
**** 59.42 8折
**** 85.44 68折
**** 293.70 88折
**** 261.79 65折
**** 11.30 88折
**** 268.27 58折
**** 128.29 88折
**** 251.03 8折
**** 208.39 75折
**** 128.88 75折
**** 62.06 9折
**** 225.87 75折
**** 12.89 75折
**** 34.28 75折
**** 62.16 58折
**** 129.12 半价
**** 218.37 半价
**** 289.69 8折
data = data.split()#字符串分割成列表 默认情况下以空格作为分隔符
sum=0
for i in range(0,len(data),3):
price=float(data[i+1])
discount =data[i+2]
if len(discount)==2:
if discount=="半价":
discount=0.5
else:
discount=float(discount[:1])*0.1
else :
discount=float(discount[:2])*0.01
sum+=price*discount
print(math.ceil(sum/100)*100)
总结 ⭐
⭐
在Python中,动态规划(Dynamic Programming,DP)算法是一种常见的算法策略,它通常被用于解决那些包含有重复子问题,并且无法使用简单的递归方式解决的问题。
动态规划算法通过将问题拆分成子问题,并且将子问题的解保存到一个表格中以避免重复计算。这样一来,当需要对父问题进行求解时,我们可以通过查询已计算过的子问题解来进行计算,从而实现高效的计算。因此,动态规划算法通常可以显著地提高代码的效率。
在Python中,动态规划算法通常可以使用递归、记忆化搜索或者迭代等不同的方式来实现。
⭐
import math
下面是一些常见的math库函数的介绍:
math.ceil(x): 返回不小于x的最小整数。
math.floor(x): 返回不大于x的最大整数。
math.sqrt(x): 返回x的平方根。
math.exp(x): 返回e的x次幂。
math.log(x, base): 返回x的以base为底的对数。
math.sin(x): 返回x的正弦值。
math.cos(x): 返回x的余弦值。
math.tan(x): 返回x的正切值。
math.pi: 圆周率常量
⭐
1MB=1024KB 1KB=1024字节 1字节=8位
⭐
进制转换总结:
Python 内置函数
bin()
、oct()
、hex()
可以分别将十进制数字转换为二进制、八进制、十六进制形式的字符串。
bin()
函数可以将一个十进制数字转换为二进制形式的字符串,字符串的前缀为'0b'
。>>> bin(10) '0b1010'
oct()
函数可以将一个十进制数字转换为八进制形式的字符串,字符串的前缀为'0o'
。>>> oct(10) '0o12'
hex()
函数可以将一个十进制数字转换为十六进制形式的字符串,字符串的前缀为'0x'
。>>> hex(10) '0xa'
另外,可以使用内置函数
int()
将一个字符串转换为十进制数字。>>> int('1010', 2) # 将二进制数 '1010' 转换成十进制 10 >>> int('12', 8) # 将八进制数 '12' 转换成十进制 10 >>> int('a', 16) # 将十六进制数 'a' 转换成十进制 10
在以上的
int()
函数中,第二个参数指定了要转换的整数的基数(进制),例如2
表示二进制,8
表示八进制,16
表示十六进制等。