问题: 最大的算式
问题描述
题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大。因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号。例如:
N=5,K=2,5个数字分别为1、2、3、4、5,可以加成:
1*2*(3+4+5)=24
1*(2+3)*(4+5)=45
(1*2+3)*(4+5)=45
……
输入格式
输入文件共有二行,第一行为两个有空格隔开的整数,表示N和K,其中(2<=N<=15, 0<=K<=N-1)。第二行为 N个用空格隔开的数字(每个数字在0到9之间)。
输出格式
输出文件仅一行包含一个整数,表示要求的最大的结果
样例输入
5 2
1 2 3 4 5
样例输出
120
样例说明
(1+2+3)*4*5=120
1 #include<stdio.h> 2 int Sum(int b[],int start,int end){ 3 int sum=0; 4 int i; 5 for(i=start;i<=end;i++){ 6 sum+=b[i]; 7 } 8 return sum; 9 } 10 int fun(int *b,int start,int n,int m){ 11 if(n == 0) 12 return Sum(b, start, m-1); 13 int total=0; 14 int sum; 15 int i; 16 for(i=start;i<m-1;i++){ 17 sum=Sum(b,start,i)*fun(b,i+1,n-1,m); 18 total=sum>total?sum:total; 19 } 20 return total; 21 } 22 int main(){ 23 int n,m,k=0; 24 int b[100]; 25 int i,j; 26 scanf("%d%d",&m,&n); 27 28 for(i=0;i<m&&(m>=2&&m<=15);i++){ 29 scanf("%d",&b[i]); 30 if(b[i]<0||b[i]>9)k++; 31 } 32 if(n>=0&&n<m&&!k) 33 printf("%d",fun(b,0,n,m)); 34 return 0; 35 }