算法–切割的数组

算法–切割的数组

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。


标题来源:编程之美2.18

有一个无序的,元素个数为2n的正整数的数组,要求:

怎样能把这个数组切割为元素个数为n的两个数组,使得两个子数组的和尽量接近。

解析:由于两个子数组的和是一定的,等于整个数组的和。如今要求使得两个字数组的和尽量的接近,也就意味着要从当中选出n个数使得这n个数的和尽可能的接近sum/2,最好还是设为从小于sum/2的方向接近。于是。这就是一个01背包的问题:

如今有2N个物品,每一个物品的重量为A[i],有一个背包的大小为sum/2,如今从中挑选出N个物品,使得背包尽可能的被装满。

于是定义递推式为:

dp[i][j][v] = max(dp[i-1][j][v], dp[i-1][j-1][v-A[i]]+A[i]);

dp[i][j][v] :从前i个物品中选择j个,重量不大于v的最大的和。

上述print部分是在打印当中的一个子数组。返回的是终于的两个数组的最小的差值。

时间复杂度为: O(N*N*sum)

拓展:假设上述代码仅仅是要求计算终于的差值,而不须要打印出结果数组的话。那么我们就能够将时间复杂度减少到N*sum.

代码为:


终于的结果是f[N][v]==true的最大的v的值即为所求。(v是从sum/2開始依次减小)。


版权声明:本文博主原创文章。博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/117122.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • [JSP] c:forEach 如何输出序号

    [JSP] c:forEach 如何输出序号

  • VSCode运行Python教程「建议收藏」

    VSCode运行Python教程「建议收藏」1)首先在自己电脑新建一个专门写Python代码的文件夹(建议使用英文命名)然后打开VSCode,点击在弹出的界面,点击“打开文件夹”(或者点击顶端菜单栏的“文件”,再选择“打开文件夹”),选择你创建的文件夹。2)打开你刚刚建立的文件夹—>新建文件,编写Python代码。参考下面操作。每次新建Python文件,点击你文件夹旁边的**“新建文件”按钮**—>输入“文件名.py…

    2022年10月24日
  • Oracle Number 自动转Decimal问题修正「建议收藏」

    Oracle Number 自动转Decimal问题修正「建议收藏」spark加载Oracle表的Number字段,直接写入关系表会被转成decimal双精度类型解决方式:1.构建Jdbc会话publicclassJdbcOracleDialectextendsJdbcDialect{@OverridepublicbooleancanHandle(Stringurl){returnurl.startsWith(“jdbc:oracle”);}@Overrid…

  • spring boot dubbo配置(上古卷轴5基础整合包)

    SpringBoot整合Dubbo3.0基础配置(dubbo-spring-boot-starter)一、说明众所周知,阿里早已把dubbo捐赠给了Apache,现在dubbo由Apache在维护更新,dubbo也已经成了Apache下的顶级项目。所以本demo项目所依赖的坐标是Apache官方最新的3.0.4坐标。<dependency><groupId>org.apache.dubbo</groupId><artifac

  • ftp客户端软件,8款最受欢迎的ftp客户端软件

    对于ftp客户端软件,你了解多少?其实一般人也接触不到这种软件。ftp客户端软件主要是针对从事网站管理的工作人员比较有利的一款工具。可以帮助他们快速的解决工作中的问题。方便、简单、快捷又明了的解决问题,下面有六款ftp客户端软件的介绍。第一款:IIS7服务器管理工具这款工具是真的好用,童叟无欺的那种好用。在我心里它是排在中文版javaftp工具类中的榜首的。它不仅拥有每个javaftp工具类都具备的批量管理功能,还具备很多你意想不到的地方,比如定时同步(上传和下载)、多任务同时进行、定时备份还能够自

  • java编译原理

    java编译原理4.Java编译原理1.javac是什么?(1)javac是一种编译器,能够将一种语言规范转换成另一种用语言规范,通常编译器是将便于人们理解的语言规范成机器容易理解的语言规范。(2)javac的任务就是将java源代码语言转换成jvm能够识别的语言,然后jvm将jvm语言再转化成当前机器能够识别的语言(这样使得对开发者屏蔽与机器相关的细节,并且使得语言的执行与平台无关)2.javac编译器的基本结…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号