自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

heyong的博客

大佬好,我是贺同学

  • 博客(17)
  • 资源 (1)
  • 收藏
  • 关注

原创 【背包问题】01背包问题

一、01背包问题1.1 题目有NNN件物品和一个容量为VVV的背包,放入第iii件物品耗费的费用是CiC_iCi​,得到的价值是WiW_iWi​。求解将哪些物品装入背包可使得价值总和最大。1.2 基本思路01背包是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或者不放。用子问题定义状态:即 F[i,v]F[i,v]F[i,v] 表示前 iii 件物品恰放入一个容量为 vvv 的背包可以获得的最大价值。则其状态转移方程便是:F[i,v]=max{F[i−1,v],f[i−1,v−Ci]+

2021-08-21 11:48:48 539

原创 【源码分析】ThreadLocal详解

一、前置知识1.1 ThreadLocal的作用ThreadLocal主要起到线程隔离的作用,每个线程可以通过ThreadLocal存放自己私有的数据。线程1存放的数据,只有线程1能拿到,其它线程都不能获取到该数据。应用场景主要有:Spring框架中的事务功能,@transactional注解的处理类将数据库连接对象放在了ThreadLocal中Mybatis框架中分页功能也使用了ThreadLocal1.2 Java中的四种引用类型强引用:JVM宁可报OOM,也不会回收强引用所指向的对象

2021-08-13 16:03:03 300

原创 Python中list,dict拆解传参方法

一、原始传参方式1.1 列表传参列表传参:顾名思义,就是将整个list作为一个整体参数传给函数,然后函数内部进行解析参数。如下:def func(arg): for i in range(len(arg)): print("第{0}个参数为{1}".format(i + 1, arg[0])) if __name__ == '__main__': arg = [1, 2, 3] func(arg)输出:第1个参数为1第2个参数为1第

2021-11-24 14:49:18 1759

原创 使用Cplex求解器求解线性规划LP问题

求解单目标线性规划(LP)问题:from docplex.mp.model import Model"""maximize: 12 desk_production+20 cell_productionsubject subject to: desk_production>=100 cell_production>=100 0.2 desk_production+0.4 cell_production<=400

2021-11-08 16:46:07 974

原创 Python中list的append()方法踩坑记录

append()方法定义:append() 方法用于在列表末尾添加新的对象。语法:list.append(obj)参数:obj – 添加到列表末尾的对象。返回值:无返回值,但会修改原来的list注意:我们添加到list中的是对象的引用(Java中叫引用),也就是说,执行完list.append(obj)代码后,obj后续再改变也会引起list的改变,这就是一个大坑了,需要采用如下方式避免:list.append(obj.copy())我们直接将obj拷贝一份放到list中,后续obj的

2021-11-02 16:09:47 1860

原创 Java中堆的实现

Java中堆是采用优先级队列来实现的,如下:Queue<Integer> minheap =new PriorityQueue<Integer>();//默认为创建最小堆Queue<Integer> maxheap =new PriorityQueue<Integer>((n1, n2) -> n2-n1);//创建最大堆

2021-09-14 10:04:56 230

原创 Java中的内部类

内部类拥有其外围类所有元素的访问权。一、使用.this和.new如果你需要生成对外部类对象的引用,可以使用外部类的名字+.this。public class DotThis{ void f(){System.out.println("DotThis.f()");} public class Inner{ public DotThis outer(){ return DotThis.this;//生成对外部类对象的引用 } .

2021-09-01 09:31:43 139

原创 【背包问题】背包问题求具体方案

一、题目有 NNN 件物品和一个容量是 VVV 的背包。每件物品只能使用一次。第 iii 件物品的体积是 viv_ivi​,价值是 wiw_iwi​。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出字典序最小的方案。这里的字典序是指:所选物品的编号所构成的序列。物品的编号范围是 1…N。输入格式第一行两个整数,NNN,VVV,用空格隔开,分别表示物品数量和背包容积。接下来有 NNN 行,每行两个整数 vi,wiv_i,w_ivi​,wi​,用空格隔开,分别表示第 iii

2021-08-23 21:45:12 214

原创 【背包问题】背包问题求方案数

一、题目有 NNN 件物品和一个容量是 VVV 的背包。每件物品只能使用一次。第 iii 件物品的体积是 viv_ivi​,价值是 wiw_iwi​。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最优选法的方案数。注意答案可能很大,请输出答案模 109+710^9+7109+7 的结果。输入格式第一行两个整数,NNN,VVV,用空格隔开,分别表示物品数量和背包容积。接下来有 NNN 行,每行两个整数 vi,wiv_i,w_ivi​,wi​,用空格隔开,分别表示第 i

2021-08-23 19:48:30 311

转载 【背包问题】有依赖的背包问题

一、问题这种背包问题的物品间存在某种“依赖”的关系。也就是说,物品 i 依赖于物品 j,表示若选物品 i,则必须选物品 j。我们直接用一个题目来解释这个问题,题目如下。题目:有 NNN 个物品和一个容量是 VVV 的背包。物品之间具有依赖关系,且依赖关系组成一棵树的形状。如果选择一个物品,则必须选择它的父节点。如下图所示:如果选择物品5,则必须选择物品1和2。这是因为2是5的父节点,1是2的父节点。每件物品的编号是 iii,体积是 viv_ivi​,价值是 wiw_iwi​,依赖的父节点编号是

2021-08-23 17:22:57 461

原创 【背包问题】 分组背包问题

一、问题有 NNN 件物品和一个容量为 VVV 的背包。第 iii 件物品的费用是 CiC_iCi​,价值是 WiW_iWi​。这些物品被划分为 KKK 组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。二、思路这个问题变成了每组物品有若干种策略:是选择本组的某一件,还是一件都不选。也就是说设 F[k,v]F [k, v]F[k,v] 表示前 kkk 组物品花费费用 vvv 能取得的最大权值,则有:F[k,v]=max{F[k−1,v]

2021-08-23 16:19:30 340

原创 【背包问题】混合背包问题

一、题目有 NNN 种物品和一个容量是 VVV 的背包。物品一共有三类:第一类物品只能用1次(01背包);第二类物品可以用无限次(完全背包);第三类物品最多只能用 sis_isi​ 次(多重背包);每种体积是 viv_ivi​,价值是 wiw_iwi​。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。二、思路既然是3种背包的混合问题,那么我们其实可以直接调用前面几篇博客写过的算法,伪代码如下:for(int i = 1; i <= N; i

2021-08-23 15:14:07 470 2

原创 【背包问题】二维费用背包问题

一、问题二维费用的背包问题是指:对于每件物品,具有两种不同的费用,选择这件物品必须同时付出这两种费用。对于每种费用都有一个可付出的最大值(背包容量)。问怎样选择物品可以得到最大的价值。设第 iii 件物品所需的两种费用分别为 CiC_iCi​ 和 DiD_iDi​。两种费用可付出的最大值(也即两种背包容量)分别为 VVV 和 UUU。物品的价值为 WiW_iWi​。二、思路费用加了一维,只需状态也加一维即可。设dp[i][j][k]dp[i][j]{\color{Red} [k]}dp[i][j][

2021-08-23 11:14:00 681

原创 【背包问题】多重背包问题

一、多重背包问题1.1 题目有 NNN 种物品和一个容量为 VVV 的背包。第 iii 种物品最多有 MiM_iMi​ 件可用,每件耗费的空间是 CiC_iCi​,价值是 WiW_iWi​。求解将哪些物品装入背包可使这些物品的耗费的空间总和不超过背包容量,且价值总和最大。1.2 思路这题目和完全背包问题很类似。基本的方程只需将完全背包问题的方程略微一改即可。因为对于第 iii 种物品有 Mi+1M_i + 1Mi​+1 种策略:取 0 件,取 1 件……取 MiM_iMi​ 件。令 F[i,v]F

2021-08-21 15:41:20 196

原创 【背包问题】完全背包问题

一、完全背包问题1.1 题目有 NNN 种物品和一个容量为 VVV 的背包,每种物品都有无限件可用。放入第 iii 种物品的费用是 CiC_iCi​,价值是 WiW_iWi​。求解:将哪些物品装入背包,可使这些物品的耗费的费用总和不超过背包容量,且价值总和最大。1.2 基本思路这个问题非常类似于 01 背包问题,所不同的是每种物品有无限件。也就是从每种物品的角度考虑,与它相关的策略已并非取或不取两种,而是有取 0 件、取 1 件、取 2件……直至取⌊V/Ci⌋⌊V /C_i⌋⌊V/Ci​⌋ 件等许多

2021-08-21 15:36:10 3771

原创 Java中自定义排序的几种方式

一、普通类型数组int[]对于普通数据类型数组,Java的Arrays类中提供了几种方法:Arrays.sort(int[] a):按照数字顺序排列指定的数组sort(int[] a, int fromIndex, int toIndex):按升序排列数组的指定范围Arrays.parallelSort(int[] a) :按照数字顺序排列指定的数组Arrays.parallelSort(int[] a, int fromIndex, int toIndex) :按照数字顺序排列数组的指定范围

2021-08-20 11:25:36 9828 2

原创 【Spring】理解Spring IOC容器

一、概述IOC中文名为控制反转,这里的反转指的是依赖对象的获得被反转了。为了更明确说明控制反转的含义,我举了一个简单的例子,如下:假设有一个对象A依赖于对象B:class A{ //A依赖B private B b; //构造函数 public A(B b){ this.b = b; } //setter public void setB(B b){ this.b = b; }}class B{ //类B}不使用IOC时:当类A依赖类B时,我们首先要先实例化对象

2021-08-18 11:19:41 197

9大背包问题详解9大背包问题详解

9大背包问题详解

2021-08-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除