相较于我上一题写的动态规划,这一题比较简单
代码如下:
#include<stdio.h>
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;
}
只要分解成两个数就可以了,因为这两个数肯定比被分解成的数小,而这两个数的最大乘积分解已经求出来了,把所有可能的分解组合的最大乘积求出来,就是新的数的最大乘积分解
一直传递下去,就可以求出想要的数的最大乘积分解了