简单问题,可以进行推广:其一,本题中只有三个数,因此直接枚举;其二,若有n个数,则是个dp问题。
# 3个数直接枚举 from functools import reduce a, b, c = map(int, input().split()) all_plus = sum([a, b, c]) all_multi = reduce(lambda i,j: i*j, [a, b, c]) res = [all_plus, all_multi, a+b*c, a*b+c, (a+b)*c, a*(b+c)] print(max(res))
写出其动态转移方程:
# 若有n个数,则是dp问题 nums = list(map(int, input().split())) N = len(nums) dp = [[nums[i] if i==j else 0 for j in range(N)] for i in range(N)] # dp[i][j] 第i个数到第j个数的最大 # 注意其初始化条件 for i in range(N): for j in range(i+1, N): for k in range(i, j): # 分段 dp[i][j] = max([dp[i][k]+dp[k+1][j], dp[i][k]*dp[k+1][j], dp[i][j]]) # max(和, 积, 自身) print(dp[0][N-1])