牛客网合唱团

14 篇文章 0 订阅
11 篇文章 0 订阅
n = 3
arr = [7,4,7]
K,D = 2,50
fm = [([0] * n) for i in range(K)]  # k*d
fn = [([0] * n) for i in range(K)]  # k*d
res = 0

# for i in range(n):
#     fm[0][i] = arr[i]
#     fn[0][i] = arr[i]
#
# for i in range(n):
#     for k in range(1, K):
#
#         for j in range(i - 1, max(0, i - D) - 1, -1):
#
#             fm[k][i] = max(fm[k][i], max(fm[k - 1][j] * arr[i], fn[k - 1][j] * arr[i])) #不要忘记0
#             fn[k][i] = min(fn[k][i], min(fm[k - 1][j] * arr[i], fn[k - 1][j] * arr[i]))
#
#     res = max(res, fm[K - 1][i])
# print(res)


n = 3
arr = [7,4,7]
K, D = 2, 50

f_max = [[0]*n for i in range(K)]
f_min = [[0]*n for i in range(K)]
# f_max[i][j] 表示选i+1个人(因为0表示选第一个人) 最后一个人必须选j 时的最大成绩
# 因为有正负所以要同时构建一个f_min,


for i in range(n):
    f_max[0][i] = arr[i]
    f_min[0][i] = arr[i]
for j in range(1,K):
    for i in range(n):
                                        #从i-1,到i-D
        for m in range(i-1,max(0,i-D)-1,-1):  #这步代码是核心直接把条件应用到了for循环里面了
            f_max[j][i] = max(f_max[j-1][m]*arr[i],f_min[j-1][m]*arr[i])
            f_min[j][i] = min(f_max[j-1][m]*arr[i],f_min[j-1][m]*arr[i])

            # f_max[j][i] = max(f_max[j][i], max(f_max[j - 1][m] * arr[i], f_min[j - 1][m] * arr[i]))
            # f_min[j][i] = min(f_min[j][i], min(f_max[j - 1][m] * arr[i], f_min[j - 1][m] * arr[i]))

print(max(f_max[K-1]))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值