- 题目:给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m]。请问k[0]xk[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。
- 思路:
- 这是一个动态规划的题目,对于长度是i的绳子,剪成的m段,有一段长度1,2,3,4……i-1,每段长度*剩下长度的最大乘积为该种情况的最大乘积,所有情况里面求出最大乘积即为该长度为i的绳子可以剪成m段的最大乘积。
- 启发或者坑:
- 动态规划的初始化
- 代码:
class Solution { public: int cutRope(int number) { if (number < 2) return 0; if (number == 2) return 1; if (number == 3) return 2; vector<int> result; result.push_back(0); result.push_back(1); result.push_back(2); result.push_back(3); for (int i =4; i <= number; i++) { int maxV = 0; for (int j = 1; j <i; j++) { int temp = j * result[i-j]; if (temp > maxV) maxV = temp; } result.push_back(maxV); } return result[number]; } };
剑指offer 48. 剪绳子
猜你喜欢
转载自blog.csdn.net/Alexia23/article/details/104093271
今日推荐
周排行