华为OD-2024年E卷-贪心的商人[100分] -- python

问题描述:

商人经营一家店铺,有number种商品,由于仓库限制每件商品的最大持有数量是item[index]
每种商品的价格是item_price[item_index][day],通过对商品的买进和卖出获取利润
请给出商人在days天内能获取的最大的利润
注:同一件商品可以反复买进和卖出
输入描述
3 第一行输入商品的数量number
3 第二行输入商品售货天数days

4 5 6 第三行输入仓库限制每件商品的最大持有数量是item[index]
1 2 3 第一件商品每天的价格
4 3 2 第二件商品每天的价格
1 5 3 第三件商品每天的价格
输出描述
输出商人在这段时间内的最大利润
例如:32

3
3
4 5 6
1 2 3
4 3 2
1 5 2
32

解题思路:

先给出利润公式:利润 = (数量)* (卖出价格 - 买入价格)

最大利润 = (最大数量) * (最高差价),当然卖出价格的时间需要在买入价格时间之后。

可以很容易想到:

在当前时间的价格之后,遍历价格列表,找到差价最高(正数)的。但是如此的话,需要遍历两次。如下:

    for j in range(len(p)-1):
        for k in range(j+1,len(p)):
            max_p = max(max_p,p[k]-p[j])

题目注意:同一件商品可以反复买进和卖出

这意味着,在一个最小买入价以及最高卖出价之间,如果有着其他价格,那么就可以反复买入和卖出。

以1 2 3为例,(3-1)差价为2,;但是(2-1)+ (3-2)= 1。

代码实现:

num = int(input())
day = int(input())
item = list(map(int,input().split()))
ans = 0
for i in range(day):
    p = list(map(int,input().split()))
    max_p = 0
    
    # for j in range(len(p)-1):
    #     for k in range(j+1,len(p)):
    #         max_p = max(max_p,p[k]-p[j])
    
    for j in range(num-1):
        if p[j+1] > p[j]:
            max_p += (p[j+1]-p[j])

    ans += (max_p * item[i])
print(ans)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值