2020-11-24:n个物品每个物品都有一定价值,分给2个人,怎么分两个人的价值差最小?
福哥答案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个人,怎么分两个人的价值差最小?的更多相关文章
- 2020.11.24 javaScript匿名函数的使用
参考链接:http://www.voidcn.com/article/p-ngxxuegm-bmv.html 匿名函数: 函数表达式中创建的函数叫做匿名函数,也就是没有函数名的函数. 自执行函数: 创 ...
- 2020.11.24 typeScript命名空间
命名空间:定义了标识符的可见范围,一个标识符可以在多个命名空间中定义,它在不同命名空间的含义是互不相干的.在一个新的命名空间可以定义任何新的标识符,它不会与已有的任何标识符发生冲突. 使用: 这个时候 ...
- Goland 2020.2.x 激活码永久破解教程 (最新Goland激活码!2020.11.26亲测可用!)
在2020.11.26 Goland的用户们又迎来了一次更新,这就导致很多软件打开时候就提示Goland激活码已经失效,码小辫第一时间给各位分享了关于最新Goland激活破解教程! goland已经更 ...
- 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 ...
- Linux编译内核 Ubuntu18.04 -2020.11.04
Linux编译内核 Ubuntu18.04 -2020.11.04 关闭虚拟机并备份 首先关闭虚拟机,其次直接找到.vmdk所在目录,并压缩该目录实现备份 下载内核源码 Linux内核官网:https ...
- apiAutoTest-更新2020/11/23
原始版本 简书:https://www.jianshu.com/p/6bfaca87a93b 博客园:https://www.cnblogs.com/zy7y/p/13426816.html test ...
- 2020.11最新JAVA环境安装配置
Windows10下java环境配置 更新:2020年11月25日 电脑环境: windows10 64位 一.下载jdk 首先到Oracle网站下载对应操作系统的jdk安装包. https://ww ...
- 【2020.11.28提高组模拟】T1染色(color)
[2020.11.28提高组模拟]T1染色(color) 题目 题目描述 给定 \(n\),你现在需要给整数 \(1\) 到 \(n\) 进行染色,使得对于所有的 \(1\leq i<j\leq ...
- magento中根据用户的id获取用户的所有订单以及每个订单中的物品 以及物品的相关属性
本篇文章是对于已经有了magento基础的人而言,在某个模块的额controller中写任意一个函数. public function goodbyeAction() { for ($customer ...
- 2020.11.26 IntellJ idea激活码失效解决方法(最新idea激活码及安装参数!)
今天是2020年11月26号,小伙伴们是不是有发现自己的idea激活码失效了,不瞒大家,小编也是一个JAVA开发者,到了公司打开idea,然后就发现事情不妙,经过1个多小时的摸索,终于把最近的安装参数 ...
随机推荐
- 适用于 Linux 的 Windows 子系统使用 Visual Studio Code
在WSL中使用VS Code,先在Windows中安装vscode,再通过功能扩展安装Vscode for wsl. VSCode 有system和user两个版本,默认下载链接为user版本.以下内 ...
- OSPF v3与v2的区别
- 痞子衡嵌入式:盘点国内RISC-V内核MCU厂商(2018年发布产品)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是国内RISC-V内核MCU厂商(2018). 虽然RISC-V风潮已经吹了好几年,但2019年才是其真正进入主流市场的元年,最近国内大量 ...
- Solon2 分布式事件总线的技术价值?
分布式事件总线在分布式开发(或微服务开发)时,是极为重要的架构手段.它可以分解响应时长,可以削峰,可以做最终一致性的分布式事务,可以做业务水平扩展. 1.分解响应时长 比如我们的一个接口处理分为四段代 ...
- Bootstarp5第四弹
六.颜色 <div class="container mt-3">最基本的文本 <p class="text-muted">柔和的文本& ...
- VUE百度地图API调用(手机端、PC端、微信通用)
百度地图API-示例中心: https://lbsyun.baidu.com/jsdemo.htm#aCreateMap 1.引入百度地图(此处用到的是V2.0版本) 1> 建立一个js文件,例 ...
- pack.json中的^ ~的区别
在版本说明前面还有个符号:'^'(插入符号)和'~'(波浪符号),他们之间的区别:例如: '~'(波浪符号):他会更新到当前minor version(也就是中间的那位数字)中最新的版本.放到我们的例 ...
- 解决el-checked-group中v-medel绑定的是一个数组对象方法(不用修改源码)
思路:弃用el-checked-group使用el-checked模拟 <!DOCTYPE html> <html> <head> <meta charset ...
- do { } while(){ }
1 var j=10; 2 do{ 3 console.log("十八岁以下禁止观看") 4 console.log(j); 5 j++; //j为18之前都不执行while 6 ...
- fastjson很好,但不适合我
记者:大爷您有什么特长呀? fastjson:我很快. 记者:23423乘以4534等于多少? fastjson:等于2343. 记者:?? fastjson:你就说快不快吧! 这个略显马丽苏的标题, ...