题14:剪绳子

题14:剪绳子
给你一根长度为n的绳子,请把绳子切为m段(m>1,n>1,且为整数),每段绳子记为k[0],k[1]…k[m]。
求出k[0]k[1]…*k[m]的最大值。
例如:当绳子的长度为n=8时,可以剪为2,3,3,最大值为18

动态规划求解:

  1. 假设方法f(n)就是获取长度为n的绳子的最大乘积
  2. 从上至下,剪第一刀的时候,有 n - 1 种方式,f(n) = max(f(i) * f(n-i)),有很多重复计算的递归式
  3. 从下至上,我们可以先获取f(2)、f(3),就可以再获取到f(4)、f(5),直到获得f(n)
public class CutRope {

    public static int cutRope(int length){

        //当绳子小于4的时候
        if(length < 2){return 0;}
        if(length == 2){return 1;}
        if(length == 3){return 2;}

        //当绳子大于等于4
        //存放最优值,这个0,1,2,3代表是不可再切
        int[] result = new int[length + 1];
        result[0] = 0;
        result[1] = 1;
        result[2] = 2;
        result[3] = 3;

        int max = 0;
        //从4开始往上求每段的最优值
        for(int i = 4;i <= length;i++){
            max = 0;
            //每一段小长度的绳子切刀的位置,相当于切一刀分为两半,求两半的乘积,因为更小的长度已经求好了
            for(int j = 1;j <= i/2;j++){
                int tem = result[j]*result[i-j];
                max = max < tem ? tem : max;
            }
            result[i] = max;
        }
        max = result[length];
        return max;
    }

	//test
    public static void main(String[] args) {

        System.out.println(cutRope(-1));
        System.out.println(cutRope(0));
        System.out.println(cutRope(1));
        System.out.println(cutRope(2));
        System.out.println(cutRope(3));
        System.out.println(cutRope(4));
        System.out.println(cutRope(5));
        System.out.println(cutRope(6));
        System.out.println(cutRope(7));
        System.out.println(cutRope(8));

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本系统的研发具有重大的意义,在安全性方面,用户使用浏览器访问网站时,采用注册和密码等相关的保护措施,提高系统的可靠性,维护用户的个人信息和财产的安全。在方便性方面,促进了校园失物招领网站的信息化建设,极大的方便了相关的工作人员对校园失物招领网站信息进行管理。 本系统主要通过使用Java语言编码设计系统功能,MySQL数据库管理数据,AJAX技术设计简洁的、友好的网址页面,然后在IDEA开发平台中,编写相关的Java代码文件,接着通过连接语言完成与数据库的搭建工作,再通过平台提供的Tomcat插件完成信息的交互,最后在浏览器中打开系统网址便可使用本系统。本系统的使用角色可以被分为用户和管理员,用户具有注册、查看信息、留言信息等功能,管理员具有修改用户信息,发布寻物启事等功能。 管理员可以选择任一浏览器打开网址,输入信息无误后,以管理员的身份行使相关的管理权限。管理员可以通过选择失物招领管理,管理相关的失物招领信息记录,比如进行查看失物招领信息标,修改失物招领信息来源等操作。管理员可以通过选择公告管理,管理相关的公告信息记录,比如进行查看公告详情,删除错误的公告信息,发布公告等操作。管理员可以通过选择公告类型管理,管理相关的公告类型信息,比如查看所有公告类型,删除无用公告类型,修改公告类型,添加公告类型等操作。寻物启事管理页面,此页面提供给管理员的功能有:新增寻物启事,修改寻物启事,删除寻物启事。物品类型管理页面,此页面提供给管理员的功能有:新增物品类型,修改物品类型,删除物品类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值