leetcode题库


动态规划法适用场景:当前结果与上一个结果相关联

1.整数拆分:将一个整数拆分为至少两个数,然后求各个数的最大乘积。

//定理:将一个数拆解为两个数时:(n/2)*(n-n/2)可得到最大乘积,拆解成大于两个数时,最大乘积为:max(i*f(n-i)),1<i<n/2
class
Solution { // 动态规划 public int integerBreak(int n) { if (n <= 3) return n - 1; int[] dp = new int[n + 1]; //初始化,1,2,3特殊处理 dp[1] = 1; dp[2] = 2; dp[3] = 3; for (int i = 4; i <= n; i++) { for (int j = 1; j <= i / 2; j++) { dp[i] = Math.max(dp[i], dp[j] * dp[i - j]); } } return dp[n]; } }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM