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