笔试-最大利润
应用
商人经营一家店铺,共有N种商品,由于仓库限制,每件商品的最大持有数量是item[i],每种商品的价格是price[i][day]。
通过对商品的买进、卖出获取利润,请给出商人在days天内能获取的最大的利润。
实现
N = int(input("请输入商品种类:"))
days = int(input("请输入售卖天数:"))
str = input("请输入每种商品的最大持有数量:").split()
item = [int(i) for i in str]
prices = []
for i in range(0, N):
s = input(f"请输入第{i}种商品的每日价格:").split()
r = [int(i) for i in s]
prices.append(r)
# print(prices)
revenue = [[] for n in prices]
# 每种商货的单品,在第i天买进,分别在第i天、第i+1天……第n-1天卖出,此类操作的营收
for n in range(0, len(prices)):
for i in range(0, days):
for j in range(i, days):
income = prices[n][j] - prices[n][i]
# 不做无效或亏本生意
if income > 0:
# 种类,买入天、卖出天、收入
revenue[n].append([i, j, income])
# print(revenue) # 三维
# 按照收入从大到小排序
for n in range(0, len(revenue)):
for i in range(0, len(revenue[n])):
for j in range(0, len(revenue[n])):
# 不能自己与自己比较
if i != j:
if revenue[n][i][-1] > revenue[n][j][-1]:
revenue[n][j], revenue[n][i] = revenue[n][i], revenue[n][j]
# print(revenue)
sum = 0
# 计算利润
for n in range(0, len(revenue)):
# 按照种类求和
s_kind = 0
# 确保非空
if revenue[n]:
for i in range(0, len(revenue[n])):
if i == 0:
s_kind = s_kind + revenue[n][i][-1] * item[n]
sold_day = revenue[n][i][1]
else:
# 每种商品的持有量,按照仓储上限计算,所以:当前方案的买入日 >= 上次已实施方案的卖出日
if revenue[n][i][0] >= sold_day:
s_kind = s_kind + revenue[n][i][-1] * item[n]
sold_day = revenue[n][i][1]
# 全种类求和
sum = sum + s_kind
print(sum)
请输入商品种类:3
请输入售卖天数:3
请输入每种商品的最大持有数量:4 5 6
请输入第0种商品的每日价格:1 2 3
请输入第1种商品的每日价格:4 3 2
请输入第2种商品的每日价格:1 5 3
32