最大乘积分解(动态规划)

最大乘积分解(动态规划)_第1张图片

相较于我上一题写的动态规划,这一题比较简单

代码如下:

#include

int main(void)
{
    long long n, max[101] = {0, 1};
    scanf("%lld", &n);
    for(int i = 1; i <= n; i++)
        max[i] = i;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= i / 2; j++)
            max[i] = (max[i] > max[j] * max[i - j]) ? max[i] : max[j] * max[i - j];
    printf("%lld", max[n]);

    return 0;
}

只要分解成两个数就可以了,因为这两个数肯定比被分解成的数小,而这两个数的最大乘积分解已经求出来了,把所有可能的分解组合的最大乘积求出来,就是新的数的最大乘积分解

一直传递下去,就可以求出想要的数的最大乘积分解了

你可能感兴趣的:(动态规划,算法)