牛客網合唱團

2021-09-30 16:28:02 字數 1468 閱讀 3373

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]))

牛客網 合唱團

有 n 個學生站成一排,每個學生有乙個能力值,牛牛想從這 n 個學生中按照順序選取 k 名學生,要求相鄰兩個學生的位置編號的差不超過 d,使得這 k 個學生的能力值的乘積最大,你能返回最大的乘積嗎?每個輸入包含 1 個測試用例。每個測試資料的第一行包含乙個整數 n 1 n 50 表示學生的個數,接下...

牛客網 動態規劃(C ) 合唱團

有 n 個學生站成一排,每個學生有乙個能力值,牛牛想從這 n 個學生中按照順序選取 k 名學生,要求相鄰兩個學生的位置編號的差不超過 d,使得這 k 個學生的能力值的乘積最大,你能返回最大的乘積嗎?include include include include using namespace std...

合唱團問題

問題 有 n 個學生站成一排,每個學生有乙個能力值,牛牛想從這 n 個學生中按照順序選取 k 名學生,要求相鄰兩個學生的位置編號的差不超過 d,使得這 k 個學生的能力值的乘積最大,你能返回最大的乘積嗎?輸入 每個輸入包含 1 個測試用例。每個測試資料的第一行包含乙個整數 n 1 n 50 表示學生...