题解 | #剪绳子#

剪绳子

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

动态规划解决剪绳子问题

有思路和解释

```
public int cuttingRope(int n){
    if (n<4) return n-1;//小于4的直接返回n-1
    int[] dp = new int[n+1];
    //初始化
    dp[1] = 0;
    dp[2] = 1;
    dp[3] = 2;
    //外层控制总的绳子长度
    for (int i = 4; i < dp.length; i++) {
        //为什么从2开始?
        //一段绳子,剪的话,剪成长度为1和剩下长度,相乘没有意义啊,所以从剪成2和剩余的开始
        //从2开始,然后可以剪成3和剩余、4和剩余、5和剩余。。。等
        //其中需要找出剪得最大值,即为当前绳子长度所能剪得的乘积最大值
        //内层控制当前绳子剪得位置
        for (int j = 2; j < i; j++) {
            //当前绳子可以剪成j长度和剩余的i-j长度,
            //1、Math.max(j*(i-j), j*dp[i-j])找出j长度和剩余长度的乘积最大值
            //j*(i-j)表示j长度乘以剩余长度,j*dp[i-j]表示j长度乘以剩余长度的可以继续剪切的乘积最大值
            //2、再一次和dp[i],比较取最大值,因为当前绳子可以被剪成2长度和剩余长度,也可以被剪成3和剩余长度。。。
            //所以,需要在内循环中寻找当前绳子长度的乘积最大值
            'dp[i] = Math.max(dp[i], Math.max(j*(i-j), j*dp[i-j]));'
        }
    }
    return dp[n];
}
```
全部评论

相关推荐

大疆在线测评都考什么呀,会考企业概况啥的吗
又被画饼了的做题家很...:不会。刚做完,就是材料分析、态度题、算术题、逻辑题。总共60道。
投递大疆等公司8个岗位
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-11 11:21
被夸真的超级开心,好可爱的姐姐
码农索隆:老色批们不用脑补了,我把金智妮的图找来了查看图片
点赞 评论 收藏
分享
小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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