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





![[二分查找]LeetCode2040:两个有序数组的第 K 小乘积](https://img-blog.csdnimg.cn/f95ddae62a4e43a68295601c723f92fb.gif#pic_center)













