问题描述:
题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大。因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号。例如:
N=5,K=2,5个数字分别为1、2、3、4、5,可以加成:
12(3+4+5)=24
1*(2+3)(4+5)=45
(12+3)*(4+5)=45
分析:
一开始认为把乘号放在最大的数中间就行了,得零分。仔细一想!乘号多的时候这个结论就不适用,所以还是要挨个计算。在不改变顺序的情况下,我们要得到所有可能值,可以建立一个大小为n+1*k+1的二维表格.填表方法是:
1.先算出从第一个数字到i个的和。存在表格【i+1】【0】位置。
2.k=0时,最大值就是和。
3.k!=0,从第二行开始,表格中的数字是乘号在各个和之间移动得到的最大值。
因为乘号数多于数字个数是没有意义的,所以加上条件i>j。
0 | 1 | 2 | |
0 | 0 | 0 | 0 |
1 | 0< |