下面给大家分享的是动态规划与贪婪算法剪绳子的代码实现与思路,感兴趣的朋友可以一起来了解一下,一共有3种代码实现思路哦。
题目:
给你一条长度是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。
思路1:
代码实现:public class Solution
{
public int cutRope(int n)
{
// n<=3的情况,m>1必须要分段,例如:3必须分成1、2;1、1、1 ,n=3最大分段乘积是2,
if (n == 2)
return 1;
if (n == 3)
return 2;
int[] dp = new int[n + 1];
/*
下面3行是n>=4的情况,跟n<=3不同,4可以分很多段,比如分成1、3,
这里的3可以不需要再分了,因为3分段最大才2,不分就是3。记录最大的。
*/
dp[1] = 1;
dp[2] = 2;
dp[3] = 3;