【剑指offer】剪绳子

剪绳子

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

贪心解法
把绳长target剪成i段的最大值为:Math.pow(n, i - c) * Math.pow(n + 1, c)
如:target=8 i=3时,ans=2^1*3^2
然后在剪成2段、3段...x段中取最大值即可。

public class Solution {
    public int cutRope(int target) {

        int result = 0;
        for (int i = 2; i <= target; i++) {
            int n = target / i, c = target % i;
            int ans = (int) (Math.pow(n, i - c) * Math.pow(n + 1, c));
            if (ans > result) {
                result = ans;
            }
        }
        return result;
    }
}

DP解法
f[i]表示长度为i的绳子的乘积最大值。
f[i] = Max{f[j]*f[i-j]} 0<j<i

public class Solution {
    public int cutRope(int target) {

        int[] dp = new int[target + 1];
        dp[0] = 1;
        dp[1] = 1;
        for (int i = 2; i <= target; i++) {
            if (i != target) { // 当i!=target时,长度为i的段也可以不分割!
                dp[i] = i;
            }
            for (int j = 1; j < i; j++) {
                dp[i] = Math.max(dp[i], dp[j] * dp[i - j]);
            }
        }
        return dp[target];
    }
}
全部评论
大佬强,看懂贪心了
点赞 回复 分享
发布于 2020-07-31 17:09
大佬,最后dp算法,// 当i!=target时,长度为i的段也可以不分割! 因为限制了切的数目最少一刀,放在这里是不是会影响最后的结果
点赞 回复 分享
发布于 2020-04-01 10:37
请问贪心最大值那个公式是怎么理解的
点赞 回复 分享
发布于 2020-02-15 22:11

相关推荐

求实习的小白1213:华科去这 你是真敢去啊
点赞 评论 收藏
分享
04-08 10:36
已编辑
华南理工大学 C++
点赞 评论 收藏
分享
昨天 13:04
已编辑
门头沟学院 算法工程师
智谱和米哈游都是ai大模型agent的业务钱的话还是米更多,几乎翻倍了,有没有老哥是两个公司其中一个的,能问问转正率咋样嘛,我问的hr回答都是做的好就可以转正暑期实习
码农索隆:选米哈游:短期高薪、敢承担风险、具备强创新能力,且愿押注游戏AI赛道。 选智谱:稳定性与行业通用能力积累,接受薪资差距以换取更稳妥的职业基础。
投递北京智谱华章科技等公司6个岗位 > 实习期间如何提升留用概率?
点赞 评论 收藏
分享
评论
4
1
分享

创作者周榜

更多
牛客网
牛客企业服务