今天上课,老师教了小易怎么计算加法和乘法,乘法的优先级大于加法,但是如果一个运算加了括号,那么它的优先级是最高的。例如:
1+2*3=7 1*(2+3)=5 1*2*3=6 (1+2)*3=9
现在小易希望你帮他计算给定3个数a,b,c,在它们中间添加"+", "*", "(", ")"符号,能够获得的最大值。
1+2*3=7 1*(2+3)=5 1*2*3=6 (1+2)*3=9
一行三个数a,b,c (1 <= a, b, c <= 10)
能够获得的最大值
1 2 3
9
将本题推广到n个数,采用动态规划解法 给出我的一维动态规划代码 dp[i]表示前i 个数中构成最大的数 写出转化方程: dp[i] = max(nums[i]*dp[i-1], nums[i]+dp[i-1], dp[i-2]*(nums[i]+nums[i-1])) 如有不对的地方,还请多指正!输入格式: 第一行输入数字的个数n 第二行输入数字数组a1,a2,...,an def solution(nums, n): dp = [0]*(n) dp[0], dp[1] = nums[0], max(nums[0]+nums[1], nums[0]*nums[1]) for i in range(2, n): dp[i] = max(nums[i]*dp[i-1], nums[i]+dp[i-1], dp[i-2]*(nums[i]+nums[i-1])) return dp[-1] if __name__ == '__main__': while 1: n = int(input().strip()) nums = list(map(int, input().strip().split())) print(solution(nums, n))
import sys a, b, c = sorted(map(int, sys.stdin.readline().strip().split())) if c == 1: print(3) elif b == 1: print(2 * c) elif a == 1: print((1 + b) * c) else: print(a * b * c)
import sys arr=list(map(int,sys.stdin.readline().split())) arr.sort() if arr[0]==1: print((arr[0]+arr[1])*arr[2]) else: print(arr[0]*arr[1]*arr[2])
推广到 n 个数
dp[i[[j] 代表 index 从 i 到 j (包含 i 和 j)中的最大值
所以:
dp[i][j] = max(dp[i][k] + dp[k+1][j],dp[i][k] * dp[k+1][j])for i <=k < j
nums = list(map(int,input().strip().split()))
dp = [[0]*len(nums) for i in range(len(nums))]
for i in range(len(dp)-1,-1,-1):
for j in range(len(dp[0])):
if i == j:
dp[i][j] = nums[i]
else:
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]])
# print(dp)
print(dp[0][len(nums)-1])
a, b, c = map(int, input().split()) # 2*2*2 八种组合 results = [] # 存储八个结果 results.append(eval("{}+{}+{}".format(a, b, c))) results.append(eval("{}*{}*{}".format(a, b, c))) results.append(eval("{}+{}*{}".format(a, b, c))) results.append(eval("{}*{}+{}".format(a, b, c))) results.append(eval("({}+{})*{}".format(a, b, c))) results.append(eval("{}+({}*{})".format(a, b, c))) print(max(results))
input1 = raw_input()
list1 = input1.split(' ')
for i in range(0,len(list1)):
list1[i] = int(list1[i])
max_num = 0
for j in range(0,len(list1)):
add_num = list1[0] + list1[1]
res1 = add_num * list1[2]
if max_num < res1:
max_num = res1
res2 = list1[0] * list1[1]* list1[2]
if max_num < res2:
max_num = res2
temp = list1[0]
list1.remove(list1[0])
list1.append(temp)
print(max_num)