Alibaba 7.27 笔试
第一题
第一题我压根就没看懂题目说的是什么意思...
第二题 就有一个人收藏古董,古董摆在n层的架子上,然后每一层的古董价值各不相同,要挑选出m个古董
1. 每次只能在每一层的两端挑选
2. 使得m个古董的总的价值最大
def main(n, m, value): opt = [[0] * (m+1) for i in range(n+1)] # initialize for i in range(1, n+1): for j in range(1, m+1): if j >= 2: if len(value[i-1]) >= 2: opt[i][j] = max(opt[i-1][j-1] + value[i-1][0], opt[i-1][j-1] + value[i-1][-1], opt[i-1][j-2] + value[i-1][-1] + value[i-1][0]) elif len(value[i-1]) == 1: opt[i][j] = max(opt[i-1][j-1] + value[i-1][0]) else: # j = 1 if len(value[i-1]) >= 2: opt[i][j] = max(value[i-1][0], value[i-1][-1]) + opt[i-1][j-1] else: opt[i][j] = value[i-1][0] + opt[i-1][j-1] return opt[n][m]
算例
value = [ [3, 2], [1, 4, 1, 5] ] n = 2 m = 3 return 10