剪绳子

剪绳子

http://www.nowcoder.com/questionTerminal/57d85990ba5b440ab888fc72b0751bf8

  1. 自顶向下
    int cutRope(int number) {
         vector<int> memo(number + 1, 1);
         return helpCutRope(memo, number);
     }
     int helpCutRope(vector<int> &memo, int number)
     {
         if(number == 1) return 1;
         if(memo[number] > 1) return memo[number]; 
         for(int i = 1; i < number; i++)
         {
             memo[number] = max( memo[number], i * ((number - i) <= 
                                helpCutRope(memo, number - i) ? 
                                helpCutRope(memo, number - i) : number - i));
         }
         return memo[number];
     }
  2. 自底向上
    int cutRope(int number)
     {
         vector<int> dp(number + 1, 1);
         for(int i = 2; i <= number; i++)
         {
             for(int j = 1; j < i; j++)
             {
                 dp[i] = max(dp[i], j * (dp[i - j] <= (i - j) ? i - j : dp[i - j]));
             }
         }
         return dp[number];
     }
全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务