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个多小时的摸索,终于把最近的安装参数 ...
随机推荐
- HGD1-LSP-函数集-网络整理
CAD LSP函数集 header
- RPA的市场定义和企业选型
RPA(Robotic Process Automation)译为机器人流程自动化,又可以称为数字化劳动力,是一种智能化软件,通过模拟并增强人类与计算机的交互过程,实现工作流程中的自动化.RPA具有对 ...
- Spring--注解开发+依赖注入
自动装配 数据层: 业务层: 自动装配: 结果: 若是将自动装配的注解放在set函数处: 结果: 结果相同,若是将set方法去掉的话: 结果: 这样的话,set方法也得到解放了耶! 以上都是按照类型装 ...
- 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(11)-Charles如何模拟弱网环境
1.前言 张三:"我写的软件好奇怪啊,在网络好的时候一点问题也没有,但是信号差的时候明显卡顿,看来我只能一直蹲在卫生间.电梯或者地铁(信号差)调bug了". Charles:&qu ...
- 基于 Agora SDK 实现 Windows 端的多人视频互动(基于3.6.2版本)
本文介绍如何通过 Agora SDK 在 Windows 平台快速实现互动直播.互动直播和实时通话的区别就在于,直播频道的用户有角色之分.你可以将角色设置为主播或者观众,其中主播可以收.发流,观众只能 ...
- Salesforce Javascript(三) 小结1
本篇参考: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Functions https://developer.mozi ...
- Java面试——锁
公平锁:是指多个线程按照申请锁的顺序来获取锁,有点先来后到的意思.在并发环境中,每个线程在获取锁时会先查看此锁维护的队列,如果为空,或者当前线程是等待队列的第一个,就占有锁,否则就会加入到等待队列中, ...
- 一个基于GPT模型实现的Git Commit信息自动生成工具
每次提交代码的时候,你是否有为如何写Commit Message而迟迟按不下提交的时刻呢?然后,死磨硬泡写了一些并提交后,又被review的小伙伴吐槽了呢?相信很多小伙伴有过这样的经历吧? 趁着最近C ...
- PyQt5学习 (2)--QWidget(上)
描述: 1.所有可视控件的基类 2.是一个最简单的空白控件 3.控件时用户界面的最小元素:接收各种事件.绘制在桌面上,展示给用户看 4.每个控件都是矩形的,它们按Z轴顺序排序 5. ...
- 随机服务系统模拟—R实现(三)
M/M/c随机服务系统的模拟 M/M/1服务系统:(1)队列长度没有限制:(2)顾客到达的时间间隔和服务时间均服从指数分布:(3)服务台数量为c. 一.M/M/c随机服务系统的模拟 在M/M/c排队系 ...