转载请注明来自souldak,微博:@evagle

题目有点拗口,举个例子,有1,2,3一共3个数,将这三个数分成两部分,有3种分法1 | 2,3或者1,2| 3 或者1,3|2,然后计算每部分所有数的和,
1 | 2,3 -> 和为1,5,和的差是4
1 2| 3 -> 和为3,3,和的差是0
1 3|2 -> 和为4,2,和的差是2
所以按照1,2| 3分得到的和的差最小。

那么任意给定一个数组,如何找出最小值呢?

思路:差最小就是说两部分的和最接近,而且和所有数的和SUM的一半也是最接近的。假设用sum1表示第一部分的和,sum2表示第二部分的和,SUM表示所有数的和,那么sum1+sum2=SUM。假设sum1<sum2 那么SUM/2-sum1 = sum2-SUM/2;
所以我们就有目标了,使得sum1<=SUM/2的条件下尽可能的大。也就是说从n个数中选出某些数,使得这些数的和尽可能的接近或者等于所有数的和的一般。这其实就是简单的背包问题了:
背包容量是SUM/2. 每个物体的体积是数的大小,然后尽可能的装满背包。
dp方程:f[i][V] = max(f[i-1][V-v[i]]+v[i], f[i-1][V] )
f[i][V]表示用前i个物体装容量为V的背包能够装下的最大值,f[i-1][V-v[i]]+v[i]表示第i个物体装进背包的情况,f[i-1][V]表示第i件物品不装进背包的情况。

按照dp方程不难写出代码:
初始值:f[0][k]=0,f[i][0]=0;

for(i=0;i<n;i++){for(j=1;j<SUM/2;j++){   f[i][j]=f[i-1][j];if(v[i]<=j && f[i-1][j-v[i]]+v[i]>f[i][j]){f[i][j]=value[i-1][j-v[i]]+v[i];}}

最终差值就是SUM-2*f[n-1][SUM/2];

将数组分成两部分使得两部分的和的差最小相关推荐

  1. LeetCode 2035. 将数组分成两个数组并最小化数组和的差(状态压缩DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个长度为 2 * n 的整数数组. 你需要将 nums 分成 两个 长度为 n 的数组,分别求出两个数组的和,并 最小化 两个数组和之 差的绝对值 ...

  2. 背包问题变种:将数组分成两部分使得两部分的和的差最小

    题目: 将一个数组分成两部分,不要求两部分所包含的元素个数相等,要求使得这两个部分的和的差值最小.比如对于数组{1,0,1,7,2,4},可以分成{1,0,1,2,4}和{7},使得这两部分的差值最小 ...

  3. python数组分成两个和相等的子集_javascript,_动态规划——把一个整数数组分成两个和相等的子集,怎么写,javascript - phpStudy...

    动态规划--把一个整数数组分成两个和相等的子集,怎么写 当数组nums=[2,3,5]时,测试通过,但当nums=[5,3,2]时,测试就不能通过,这是为什么? window.onload = fun ...

  4. LeetCode 2035. 将数组分成两个数组并最小化数组和的差

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.算法详解 3.时间复杂度 4.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述   给你一个 ...

  5. (笔试题)将数组分成两组,使两组的和的差的绝对值最小

    题目: 数组中的数分为两组,给出一个算法,使得两个组的和的差的绝对值最小数组中的数的取值范围是0<x<100,元素个数也是大于0,小于100 比如a[]={2,4,5,6,7},得出的两组 ...

  6. 【LeetCode 剑指offer刷题】数组题2:57 有序数组中和为s的两个数(167 Two Sum II - Input array is sorted)...

    [LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) 57 有序数组中和为s的两个数 题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是 ...

  7. 求以下double数组的平均值(四舍五入保留两位小数):

    import java.math.BigDecimal;/*** 求以下double数组的平均值(四舍五入保留两位小数):* double[] arr = {0.1,0.2,2.1,3.2,5.56, ...

  8. scala 数组合并_Scala程序合并两个数组或数组缓冲区

    scala 数组合并 Scala | 合并两个数组 (Scala | Merging two arrays) Arrays are important data structures in progr ...

  9. java数组的扩容,将两个数组合并成一个数组

    java数组的扩容,将两个数组合并成一个数组 //将下列两个数组合成一个数组 public class Test04 {public static void main(String[] args) { ...

  10. 作业帮:给定一个整数数组,找出其中两个数相加等于目标值(去重set)

    题目描述 给定一个整数数组,找出其中两个数相加等于目标值输入 [1,3,5,7,9,11] 10输出 1,9 3,7 代码: import java.util.HashMap; import java ...

最新文章

  1. Linux 中ifconfig和ip addr命令查看不到ip解决方法
  2. 颜宁教授当年若当选科学院院士,她还会出走清华吗?
  3. 31 天重构学习笔记28. 为布尔方法命名
  4. 11kw星三角启动延时几秒_电机星三角降压启动接线方法图解
  5. ansible-playbook 手工编译安装nginx
  6. django 1.8 官方文档翻译: 3-6-1 中间件概览
  7. 读后感:软件测试经验与教训
  8. 随想录(写给那些学校不是985、211的同学们)
  9. new和delete创建和销毁二维数组
  10. 帆软报表设计器菜单栏介绍之二文件菜单
  11. 数据--第35课 - 创建二叉树
  12. oracle rman异地备份,rman异地备份与恢复测试
  13. B站左程云算法视频中级班01
  14. 2021中国科学院文献情报中心期刊分区表 计算机
  15. 多家银行手机转账现高危漏洞 ,用户资金或被非法窃取
  16. Android开发之使用Web Service进行网络编程
  17. Nand2Tetris 计算机结构
  18. Log4j2维护者吐槽没工资还要挨骂!!!
  19. 能提取HTML网页正文的网站,智能提取网页正文新方法
  20. IBM bladecenter H刀箱BladeCenter北电交换机VLAN配置

热门文章

  1. 2021年2月程序员工资统计,平均15144元
  2. Python翻译库 pygtrans 谷歌翻译
  3. 淘宝差评回复模板,最新最全差评回复话术
  4. 人工智能(4)发展现状及未来趋势
  5. c艹入门->入土 ( 二 )
  6. 一边裁员、一边招聘,领导到底想干啥?
  7. 最优化理论——线搜索技术·黄金分割法
  8. 电脑维修常用检修软件技术
  9. 远程唤醒、WOL、Magic_Packet【转】
  10. 减法公式运算法则_加减法运算法则