map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
map() 函数语法:
map(function, iterable, ...) ## function -- 函数 ## iterable -- 一个或多个序列
实例:
a = [1,2,3,4,5] b = list(map(lambda x: x ** 2, a)) print(b) ## 结果 [1, 4, 9, 16, 25] ## 在写算法题的时候map函数主要用于对读入的数据进行类型转换 ## 如 a = input().split() b = list(map(int, a)) print(a) print(b) ## 结果 1 2 3 4 ['1', '2', '3', '4'] [1, 2, 3, 4]
Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串
split() 函数语法:
str.split(str="", num=string.count(str)). ## str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。 ## num -- 分割次数。默认为 -1, 即分隔所有。 # 实例 str = "hello python world !" print (str.split()) print (str.split(' ', 1 )) # 输出 ['hello', 'python', 'world', '!'] ['hello', 'python world !']
有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。
第 i件物品的体积是 Vi,价值是 Wi。
求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。
输出最大价值。
第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。
接下来有 N 行,每行两个整数 Vi,Wi,用空格隔开,分别表示第 i件物品的体积和价值。
输出一个整数,表示最大价值。
4 5 1 2 2 4 3 4 4 5
8
n, v = map(int, input().split()) goods = [] for i in range(n): goods.append([int(i) for i in input().split()]) print(goods) # 初始化,先全部赋值为0,这样至少体积为0或者不选任何物品的时候是满足要求 dp = [[0 for i in range(v+1)] for j in range(n+1)] for i in range(1, n+1): for j in range(1,v+1): dp[i][j] = dp[i-1][j] # 第i个物品不选 if j>=goods[i-1][0]:# 判断背包容量是不是大于第i件物品的体积 # 在选和不选的情况中选出最大值 dp[i][j] = max(dp[i][j], dp[i-1][j-goods[i-1][0]]+goods[i-1][1]) print(dp[-1][-1])