題目:給你一根長度為n的繩子,請剪成m段n>1,m>1,使剩下的繩子乘積為最大值.
例:8 => 2 * 3 * 3 = 18
思路:動態規劃,比如8,第一次切割可以分成8-1種切法,將最優解儲存起來。
let n =8;
function
cut()if
(res[n]
)return res[n]
;let max =0;
for(
let i =
4;i<=n;i++
) res[i]
= max;
}return res[n];}
}let f =
cut();
f(n)
;
使用閉包儲存陣列.
思路2:貪婪演算法,如果超過5的話,那麼其實都拆分成了3 和 2 因為3(n-3)>n,3(n-3)>=2(n-2)
所以我們全部拆分成3 或者 2
如果是10,那麼不能拆分成3 3 3 1 而要拆分成 3 3 2 2
function
cut2
(n)
劍指 剪繩子
1,題目 2,思路 方法一 這個是通過數字找規律的 第一步 定義dp n 的值的含義為 數字n的乘積最大值 n 2 1 1 11 1 dp 2 1 n 3 2 1 21 2 dp 3 2 n 4 2 2 22 4 dp 4 4 n 5 3 2 32 6 dp 5 6 貌似看不出規律,別急再多寫幾個 ...
劍指Offer 剪繩子 和剪繩子
劍指offer 剪繩子 題目描述 給你一根長度為 n 的繩子,請把繩子剪成整數長度的 m 段 m n都是整數,n 1並且m 1 每段繩子的長度記為 k 0 k 1 k m 請問 k 0 k 1 k m 可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2 3 3的三段,此時得到的...
剪繩子 演算法 424,劍指 Offer 剪繩子
給你一根長度為 n 的繩子,請把繩子剪成整數長度的 m 段 m n都是整數,n 1並且m 1 每段繩子的長度記為 k 0 k 1 k m 1 請問 k 0 k 1 k m 1 可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2 3 3的三段,此時得到的最大乘積是18。示例 1 ...