JZ67-剪繩子
【題目描述】
給你一根長度為n的繩子,請把繩子剪成整數長的m段(m、n都是整數,n>1並且m>1,m<=n),每段繩子的長度記為k[1],…,k[m]。請問k[1]x…xk[m]可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2、3、3的三段,此時得到的最大乘積是18。
【解法】
1.遞迴法
//n>1,m>1,m<=n; 且每段都是整數長
//意思就是說,每一段的長度都大於等於1,且,至少要切一刀,可以切 1,2,3,...n-1刀,不一定是幾刀。
//當切n-1?時,就是n個1;
class Solution {
public:
int back_track(int n) {
if(n<=4){
return n;
}
int ret = 0;
for (int i = 1; i < n; ++i) {
ret = max(ret, i * back_track(n - i));//重點在這裡:i*back_track(n-i)
}
return ret;
}
int cutRope(int number) {
if (number == 2) {//只能切一刀1*1
return 1;
}
else if (number == 3) {//切1或2刀,1*1*1 / 2*1
return 2;
}
return back_track(number);
}
};
2.記憶法遞迴
//減少一些重複計算
class Solution {
public:
int back_track(int n, vector<int> &mark) {
if (n <= 4) {
return n;
}
// 在方法一的基礎上新增
if (mark[n] != -1) {
return mark[n];
}
int ret = 0;
for (int i = 1; i < n; ++i) {
ret = max(ret, i * back_track(n - i,mark));
}
// 新增部分
return mark[n] = ret;
}
int cutRope(int number) {
if (number == 2) {
return 1;
}
else if (number == 3) {
return 2;
}
// 新增部分
vector<int> mark(number+1, -1);
return back_track(number, mark);
}
};
3.動態規劃
class Solution {
public:
int cutRope(int number) {
if (number == 2) {
return 1;
}
else if (number == 3) {
return 2;
}
vector<int> f(number + 1, -1);
for (int i = 1; i <= 4; ++i) {
f[i] = i;//1 2 3 4
}
for (int i = 5; i <= number; ++i) {//5->number
for (int j = 1; j < i; ++j) {
f[i] = max(f[i], j * f[i - j]);
}
}
return f[number];
}
};
相關文章
- 剪繩子
- JZ-067-剪繩子
- 劍指 Offer 14- II. 剪繩子 II
- 劍指 Offer 14- I. 剪繩子 JavaScript實現JavaScript
- 《煙火》:做獨立遊戲裡扔繩子的人遊戲
- 電動繩據機 鋼筋混凝土切割繩據機 建築拆除用繩據機 可調整切割方向
- 第二節麻繩
- 經典割繩子游戲Cut the Rope Remastered Mac版(休閒益智遊戲)REMASTMac遊戲
- 第三節化學纖維繩
- PAT-B 1070 結繩【貪心】
- python 實現 割繩子問題(劍指offer 14題) 動態規劃 或者貪心演算法Python動態規劃演算法
- 登高作業安全繩佩戴識別系統
- AI識別工人安全繩佩戴告警系統AI
- 非同步剪貼簿API:解放剪貼簿操作非同步API
- 快剪輯:可以快速上手的視訊剪輯工具
- “繩索”與“連結”:《死亡擱淺》的玩法解構
- 你講故事,它剪視訊:AI視訊剪輯自動化解放熊貓眼剪輯師AI
- 剪映去重方法
- 自媒體-剪映
- 剪花布條hd 2087
- Mac 剪貼簿命令Mac
- 藍橋杯 剪格子
- 雲剪輯解決方案,支援雲端剪輯私有化部署
- AI剪輯和自定義UI,打造更智慧的剪輯體驗AIUI
- 幾款影片剪輯軟體,輕鬆完成影片轉換,剪輯
- 音訊剪輯網址音訊
- iMovie影片剪輯入門
- 視訊剪輯小結
- 使用 JS 剪貼簿 APIJSAPI
- 繩命在於折騰,我用 Nuxt.js 重構了部落格UXJS
- 剪映裡怎麼用Siri的聲音?剪映新增Siri聲音教程
- win10如何剪輯影片_win10剪輯影片的圖文教程Win10
- 免費剪輯音樂的軟體都有哪些?音訊剪輯方法分享?音訊
- 想要剪輯大片?試試剪映專業版 1.0.1中文版
- win10剪貼簿在哪裡_win10剪貼簿怎麼開啟Win10
- 影片剪輯工具對比|達芬奇 vs FCPX vs PR剪輯軟體哪家強
- 剪映專業版 - 你的短影片剪輯小幫手!附Mac/Win地址!Mac
- 如何看待剪映mac版?關於剪映專業版Mac版初體驗Mac