【无标题】

关于整数差分这道题,我看了很多博主的分析,我觉得太过于复杂。

这道题是这样的就给定一个数求把这个数分解后最大的乘积是多少。

比如3。可以分解为111,也可以分解为21。显然3的这个最大乘积是21的分法。

这道题可以采用一种动态规划的方式去求。比如你现在对3或4你已经知道他们分解后的最大乘积,那么你如何借他们的结果求5的最大乘积的。这我们所说动态规划的要干的事情,找好前面最优解与后面要求的最优解的关系。

这道题所以一种分法是,只分j*n-j形式就是只把它分两个。这里的n是要分的的数。j从1开始依次到n-1。

这里有同学就会问了。这为什么这种情况j不等于n
注意j=n的话还能分码。分0和n?这不叫分。

还有一种分法。这里假设dp[j]这个数保存的是如果j要是分这个数最优的情况。

所以dp[i]=max (dp[i],max(i*(i-j),dp[i-j]*j))这里dp[i–j]代表这个i-j划分的最大乘积。这里有同学会问如果是这样的话那个么j×dp[i-j]中j为什么不分,那不是没考虑j被分的情况,只考虑i被分为j×dp[i-j]而且j没被分,i-j被分的情况。那么不是缺少一些分的情况了吗?

其实j是从1开始遍历到n-1,举个例子当n=15若遍历到j=7时(i-j)=8那个针对这个公式而言就只分8没分7对吧。

到时你想想若j=7被分。分成34或52对吧,当然34是最优。到34中不是相当于j=3,(i-j)=12被分的最优?他也不一定是最优11被分后的最优,但是他一定包含在12分法里面吧4*(i-j),期中i-j=8。那么它还不一定是最优呢,因为12的最优可能没有4这个数作为因子。也就是说还没比3*dp[12]好呢。但这种情况,我们之前最求过。

所以这些两个分法也是涵盖所有可以能有最优分法的情况。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值