今天上课,老师教了小易怎么计算加法和乘法,乘法的优先级大于加法,但是如果一个运算加了括号,那么它的优先级是最高的。例如:
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)