福哥答案2020-11-24:

背包问题:背包容量是SUM/2. 每个物体的体积是数的大小,然后尽可能的装满背包。

golang代码如下:

package main

import (
"fmt"
) //https://blog.csdn.net/qq_26222859/article/details/69335310?utm_source=blogxgwz4 ;背包问题变种:将数组分成两部分使得两部分的和的差最小
func main() {
//vec := []int{1, 2, 3, 4, 5} //vec := []int{1, 5, 1, 1} //vec := []int{5, 2, 1} vec := []int{1, 0, 1, 7, 2, 4} //vec := []int{10, 7, 6, 5, 4} //vec := []int{1, 1, 2, 4, 5, 5, 6} //1,1,5,5 2,4,6 另一个:1 2 4 5和1,5,6
//vec := []int{1, 1, 2, 4, 4}
fmt.Println("最小差:", diff(vec))
//fmt.Println(Knapsack01(vec, vec, 4))
} func diff(arr []int) int {
sum := 0
arrLen := len(arr)
for i := 0; i < arrLen; i++ {
sum += arr[i]
}
halfOfSum := sum / 2
// 确定矩阵二维定义:第一维代表前i个物体,i可为0;第二维代表从0开始的连续容量值
// 确定矩阵长宽,并初始化。因为矩阵第一维和第二维都是从0开始,所以要加一
matrix_firstDimensionLen := arrLen + 1
matrix_secondDimensionLen := halfOfSum + 1
matrix := make([][]int, matrix_firstDimensionLen)
for i := 0; i < matrix_firstDimensionLen; i++ {
matrix[i] = make([]int, matrix_secondDimensionLen)
} ////初始化矩阵边界为0
//for i := 0; i < len(matrix[0]); i++ {
// matrix[0][i] = 0
//}
//for i := 0; i < len(matrix); i++ {
// matrix[i][0] = 0
//} //arr的下标,是否与matrix的下标冲突:是的
//matrix[i][j]定义:用前i个物体装容量为j的背包能够装下的最大值
//arr[i]定义:第i+1个物体的大小,所以arr[i-1]才是第i个物体的大小
//遍历从矩阵边界开始(不包括边界),所以i = 1, j = 1
for i := 1; i < matrix_firstDimensionLen; i++ {
for j := 1; j < matrix_secondDimensionLen; j++ {
//如果第i件物体不装进背包
matrix[i][j] = matrix[i-1][j]
//如果第i件物体装进背包 //备注:j - arr[i-1] >= 0防止下标为负
if j-arr[i-1] >= 0 && matrix[i-1][j-arr[i-1]]+arr[i-1] > matrix[i][j] {
matrix[i][j] = matrix[i-1][j-arr[i-1]] + arr[i-1]
//fmt.Println(matrix[i][j], "i=", i, ",j=", j, "i-1=", i-1, ",j-arr[i-1]=", j-arr[i-1], ",左=", matrix[i-1][j-arr[i-1]], ",右=", arr[i-1])
}
}
//fmt.Println("-----")
}
for i := 0; i < len(matrix); i++ {
for j := 0; j < len(matrix[i]); j++ {
fmt.Printf("%d\t", matrix[i][j]) }
fmt.Println("")
}
//System.out.println(matrix[len][halfOfSum]);
fmt.Println(matrix[arrLen][halfOfSum])
return sum - matrix[arrLen][halfOfSum]*2
}

  执行结果如下:

2020-11-24:n个物品每个物品都有一定价值,分给2个人,怎么分两个人的价值差最小?的更多相关文章

  1. 2020.11.24 javaScript匿名函数的使用

    参考链接:http://www.voidcn.com/article/p-ngxxuegm-bmv.html 匿名函数: 函数表达式中创建的函数叫做匿名函数,也就是没有函数名的函数. 自执行函数: 创 ...

  2. 2020.11.24 typeScript命名空间

    命名空间:定义了标识符的可见范围,一个标识符可以在多个命名空间中定义,它在不同命名空间的含义是互不相干的.在一个新的命名空间可以定义任何新的标识符,它不会与已有的任何标识符发生冲突. 使用: 这个时候 ...

  3. Goland 2020.2.x 激活码永久破解教程 (最新Goland激活码!2020.11.26亲测可用!)

    在2020.11.26 Goland的用户们又迎来了一次更新,这就导致很多软件打开时候就提示Goland激活码已经失效,码小辫第一时间给各位分享了关于最新Goland激活破解教程! goland已经更 ...

  4. Unparseable date: "Mon Aug 15 11:24:39 CST 2016",时间格式转换异常

    String datestr= "Mon Aug 15 11:24:39 CST 2016";//Date的默认格式显示 Date date=new SimpleDateForma ...

  5. Linux编译内核 Ubuntu18.04 -2020.11.04

    Linux编译内核 Ubuntu18.04 -2020.11.04 关闭虚拟机并备份 首先关闭虚拟机,其次直接找到.vmdk所在目录,并压缩该目录实现备份 下载内核源码 Linux内核官网:https ...

  6. apiAutoTest-更新2020/11/23

    原始版本 简书:https://www.jianshu.com/p/6bfaca87a93b 博客园:https://www.cnblogs.com/zy7y/p/13426816.html test ...

  7. 2020.11最新JAVA环境安装配置

    Windows10下java环境配置 更新:2020年11月25日 电脑环境: windows10 64位 一.下载jdk 首先到Oracle网站下载对应操作系统的jdk安装包. https://ww ...

  8. 【2020.11.28提高组模拟】T1染色(color)

    [2020.11.28提高组模拟]T1染色(color) 题目 题目描述 给定 \(n\),你现在需要给整数 \(1\) 到 \(n\) 进行染色,使得对于所有的 \(1\leq i<j\leq ...

  9. magento中根据用户的id获取用户的所有订单以及每个订单中的物品 以及物品的相关属性

    本篇文章是对于已经有了magento基础的人而言,在某个模块的额controller中写任意一个函数. public function goodbyeAction() { for ($customer ...

  10. 2020.11.26 IntellJ idea激活码失效解决方法(最新idea激活码及安装参数!)

    今天是2020年11月26号,小伙伴们是不是有发现自己的idea激活码失效了,不瞒大家,小编也是一个JAVA开发者,到了公司打开idea,然后就发现事情不妙,经过1个多小时的摸索,终于把最近的安装参数 ...

随机推荐

  1. TP5中redirect实现重定向及带参数跳转

    1.控制器 重定向url传参 try{ $result = Db::name('wupin')->insert($ist); if($result){ $this->redirect(ur ...

  2. goujian

    第二章的内容先对第一张来说更偏向于技术性,在团队合作中,如何保证自己所负责模块的质量的稳定,这就对自身的技术和一些良好的代码书写习惯有一定的要求.这里除了之前接触的代码的整齐(段落划分),变量值和文件 ...

  3. 关于不同平台、环境下64位int型的输入输出方式(转)

    C语言 64位int 定义方式: Linux: long long         Windows:__int64 C语言 64位int 输出方式: Linux: "%lld"   ...

  4. mysql 的存储过程

    定义不带参数的存储过程 CREATE PROCEDURE s1() BEGINselect * from ecs_admin_action;End call s1; 2.带输入参数的 create P ...

  5. php 中 session存储

    转载网址: https://blog.csdn.net/miliu123456/article/details/107048378/ php 中 session 更换存储方式(file, redis, ...

  6. VMwareWorkstation-安装虚拟机

    安装vmware 首先就是下载VMware客户端了,Vmware是收费的,过好大多数都有破解版,或者激活码 这里我是用的是VMware16,下载在网上搜一下就有,例如 下载解压后里面有一个后缀为exe ...

  7. Linux RedHat 利用 ISO镜像文件制作本地 yum源

    RedHat 利用ISO镜像文件制作本地yum源 [1]创建iso存放目录和挂载目录 1 [root@desktop ~]# cd /mnt/ 2 [root@desktop mnt]# mkdir ...

  8. CAS 单点登录系统

    一.什么是单点登录 单点登录(Sign Sion On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系 ...

  9. PHP微信三方平台-微信支付(扫码支付)

    1.官方文档地址: https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1 2.逻辑分析: 生成支付二维码->用户扫码支付-& ...

  10. http-server 服务配置跨域

    http-server --cors -p 9999 http-server --cors -p 9999 -c-1 (禁用缓存)