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]))
牛客网合唱团
最新推荐文章于 2021-08-13 17:01:31 发布