2023 年国赛 C 题 - 蔬菜定价与补货

问题描述: 小明经营着一家蔬菜店,他每天都要根据市场需求和供应情况来定价和补货。为了提高经营效益,小明决定使用计算机来辅助他的决策。现在,请你帮助小明完成这个任务。

假设小明的蔬菜店一共有 N 种蔬菜,编号为 1 到 N。每天早上,小明需要根据前一天的销售情况来预测今天每种蔬菜的需求量。已知小明对于每种蔬菜的需求量的预测误差服从均值为 0 的正态分布,标准差为 σ。对于第 i 种蔬菜的需求量预测值为 Ai,其实际需求量为 Bi。

小明每天早上可以从农场购买蔬菜,每种蔬菜的进货价格为 Ci。小明可以购买任意数量的蔬菜,但是每种蔬菜的进货量必须是整数。小明店里的蔬菜都是新鲜的,可以保存到第二天。对于第 i 种蔬菜,小明每天最多可以存放 Mi 公斤,如果超过 Mi 公斤,则需要支付额外的费用 Di。

小明希望在每天开始时,确定每种蔬菜的售价 Pi 和进货量 Xi,使得总利润最大化。已知小明对于每种蔬菜的需求量的预测误差服从均值为 0 的正态分布,标准差为 σ。

请你帮助小明计算出每种蔬菜的售价 Pi 和进货量 Xi,以及小明每天的总利润。

输入: 第一行包含两个整数 N 和 σ,表示蔬菜的种类数和预测误差的标准差。(1≤N≤1000, 1≤σ≤1000) 接下来 N 行,每行包含三个整数 Ai,Bi 和 Ci,表示第 i 种蔬菜的需求量预测值、实际需求量和进货价格。(0≤Ai,Bi,Ci≤1000) 最后一行包含两个整数 M 和 D,表示每种蔬菜的最大存储量和超过存储量时的额外费用。(1≤M,D≤1000)

输出: 第一行输出 N 个整数,表示每种蔬菜的进货量 Xi。 第二行输出 N 个整数,表示每种蔬菜的售价 Pi。 第三行输出一个整数,表示小明每天的总利润。

样例输入: 3 2 5 6 8 7 8 12 3 4 10 10 3

样例输出: 2 3 0 6 5 4 7

解题思路: 根据题目的要求,我们需要计算每种蔬菜的进货量和售价,并计算总利润。首先,我们可以根据需求量的预测误差和实际需求量的差异,来确定进货量。

进货量 Xi = Bi - Ai

然后,我们需要计算售价 Pi。售价应该足够高,以便覆盖进货成本和额外费用,并且要考虑到需求量的预测误差。我们可以使用以下公式来计算售价:

售价 Pi = Ci + σ

最后,我们需要计算总利润。总利润等于每种蔬菜的销售收入减去进货成本和额外费用的总和。我们可以使用以下公式来计算总利润:

总利润 = Σ(Pi * Bi - Ci * Xi) - Σ(D * (Xi - Mi))

其中,Σ表示对所有蔬菜求和。

根据以上思路,我们可以编写代码来解决这个问题。以下是一个可能的实现:

import math

def calculate_profit(N, sigma, vegetables, M, D):
    # 计算每种蔬菜的进货量 Xi 和售价 Pi
    X = []
    P = []
    for v in vegetables:
        A, B, C = v
        X.append(B - A)
        P.append(C + sigma)
    
    # 计算总利润
    total_profit = 0
    for i in range(N):
        total_profit += P[i] * vegetables[i][1] - vegetables[i][2] * X[i]
        if X[i] > M:
            total_profit -= D * (X[i] - M)
    
    return X, P, math.floor(total_profit)

# 读取输入
N, sigma = map(int, input().split())
vegetables = []
for _ in range(N):
    Ai, Bi, Ci = map(int, input().split())
    vegetables.append((Ai, Bi, Ci))
M, D = map(int, input().split())

# 计算结果
X, P, total_profit = calculate_profit(N, sigma, vegetables, M, D)

# 输出结果
print(' '.join(map(str, X)))
print(' '.join(map(str, P)))
print(total_profit)

这个代码使用了一个函数 calculate_profit 来计算进货量、售价和总利润。它接受蔬菜的种类数 N、预测误差的标准差 sigma、蔬菜的信息列表 vegetables、最大存储量 M 和超过存储量时的额外费用 D 作为参数,并返回进货量列表 X、售价列表 P 和总利润。

然后,我们读取输入,调用 calculate_profit 函数,最后输出结果。

这样,我们就完成了这个问题的求解。

2023 国赛 C 题 - 蔬菜定价与补货:优化经营策略,最大化利润

原文地址: https://www.cveoy.top/t/topic/oehE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录