剪绳子(动态规划边界条件)

剪绳子

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

/*
f[i]:代表数字i的剪成m段的最大值
f[i] = max(f[i],j*f[i-j])
m最小为2。因此 f[2]返回 1 ,f[3]返回2.
但是当动态规划时,n>=4时
f[2]=2;不是1 可以不划分返回2
f[3]=3;不是2 可以不划分返回3
后面的得到的一定满足f[n]>=n,即划分一定比不划分的值大。因此不需要单独考虑
f[4]:f[3]*1=3 
    f[2]*2=4
    f[1]*3=3
f[5]:f[1]*4=4
    f[2]*3=6
    f[3]*3=9
    f[4]*1=4
*/

class Solution {
public:
    int cutRope(int number) {
        if (number == 2) 
            return 1;
        if (number == 3)
            return 2;
        vector<int> f(number + 1, 0);
        f[2] = 2; f[3] = 3; // f[2 ,3]例外划分过后,没有原来的值大
        for (int i = 4; i <= number; ++i) {
            for (int j = 1; j < i; ++j) {
                f[i] = max(f[i], j * f[i - j]);
            }
        }
        return f[number];
    }
};
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-07 12:04
毕业生招你惹你了,问一个发薪日来一句别看网上乱七八糟的你看哪个工作没有固定发薪日扭头就取消了面试就问了一句公司都是这个态度吗还搞上人身攻击了...
程序员小白条:呃呃呃,都还没面试,我都不会问这么细,何况通不通过,去不去都另说,你没实力和学历的话,在外面就这样,说实话没直接已读不回就不错了,浪费时间基本上
点赞 评论 收藏
分享
码农索隆:想看offer细节
点赞 评论 收藏
分享
码农索隆:7*24,随时待命,这是去🇷🇺打仗去了啊
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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