最大的算式

简介: 最大的算式

     

问题描述

  题目很简单,给出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

#include <stdio.h>
#include <stdlib.h>
#define min(a, b) a > b ? b : a
#define max(a, b) a > b ? a : b
long long dp[16][16] = {0};   //dp[i][j]表示前i个数中有j个乘号时,所得最大值
int sum[16] = {0};    //sum[i]表示前i个数之和
int main()
{
    int N, K, i = 1, j, k, t;
    scanf("%d %d", &N, &K);
    int num[16];
    for (; i <= N; i++)
    {
        scanf("%d", &num[i]);
        sum[i] = sum[i - 1] + num[i];
    }
    //如果没有乘号的情况/连加情况
    for (i = 1; i <= N; i++)
    {
        dp[i][0] = sum[i];
    }
    //dp
    for (i = 2; i <= N; i++)
    {
        for (j = 1; j <=i-1; j++)//最大有i-1个*号
        {
            for (k = 2; k <= i; k++)    //k为这个乘号的位置(第k个数)
            {
                dp[i][j] = max(dp[i][j], dp[k - 1][j - 1] * (sum[i] - sum[k - 1])); //求前i个数有j个乘号的情况中最大的情况
                //第k个数前的最优情况*k到i个数的和,
            }
        }
    }
    printf("%lld\n", dp[N][K]);
    return 0;
}


相关文章
|
C语言
C语言之回文数的求解。回文数一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
C语言之回文数的求解。回文数一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
180 0
|
5月前
1034 有理数四则运算 (20 分)
1034 有理数四则运算 (20 分)
|
6月前
|
人工智能 算法
DAY-1 | 迭乘法、辗转相除法、试除法:最大公约数与最小公倍数问题
这段内容是一个关于计算两个数的最大公约数(Greatest Common Divisor, GCD)和最小公倍数(Least Common Multiple, LCM)的编程题目说明,包括题干、题解和方法总结。其中提到了两种方法:辗转相除法和试除法。辗转相除法通过不断用较大数除以较小数直到余数为零来求最大公约数,然后利用两数乘积除以最大公约数得到最小公倍数。试除法则是通过循环尝试两数的倍数是否同时能被两数整除来求解。在方法总结部分,还介绍了迭乘法求最小公倍数的方法。
67 0
|
6月前
L1-080 乘法口诀数列
L1-080 乘法口诀数列
31 0
|
6月前
|
C++
【PTA】​ L1-080 乘法口诀数列​(C++)
【PTA】​ L1-080 乘法口诀数列​(C++)
92 0
【PTA】​ L1-080 乘法口诀数列​(C++)
|
算法 C语言
【C语言】输入两个正整数m和n,求其最大公约数和最小公倍数。(要求用while语句实现)
【C语言】输入两个正整数m和n,求其最大公约数和最小公倍数。(要求用while语句实现)
1500 1
剑指offer 73. 不用加减乘除做加法
剑指offer 73. 不用加减乘除做加法
61 0
7-89 乘法口诀数列
7-89 乘法口诀数列
57 0
PTA 1034 有理数四则运算 (20 分)
本题要求编写程序,计算 2 个有理数的和、差、积、商。
112 0
L1-080 乘法口诀数列 (20 分)
L1-080 乘法口诀数列 (20 分)
217 0