剪绳子
剪绳子
http://www.nowcoder.com/questionTerminal/57d85990ba5b440ab888fc72b0751bf8
题目描述
给你一根长度为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。
输入描述:
输入一个数n,意义见题面。(2 <= n <= 60)
【贪心】 只要想到状态转移方程,这题就解了, dp[i] = max ( dp[i-j]*(j), dp[i-j]*dp[j], (i-j)*dp[j], (i-j)*j) (j=1,2...i-1)
class Solution {
public:
int cutRope(int number) {
int dp[number];
memset(dp,0,sizeof(dp));
dp[1]=1;
dp[2]=1;
dp[3]=2;
dp[4]=4;
for(int i=5;i<=number;i++)
{
for(int j=1;j<i;j++)
{
int temp=max(max(dp[i-j]*j,dp[i-j]*dp[j]),max((i-j)*dp[j],(i-j)*j));
dp[i]=max( dp[i], temp );
}
}
return dp[number];
}
}; 
查看23道真题和解析