背包问题

2023-10-26

一:01背包

题目:有一个容量为T的背包,现有n个物品,每个物品有都有一个体积w[ i ],和自身价值v[ i ],现在要求求出背包能够装的物品的价值最大。每个物品只可以装一次。

基本思路:01背包是背包中的最基础的问题,后面很多背包问题都是01背包和完全背包延伸出来的。01背包的特点是:每一个物品只可以放一次,可以选择放或者不放。我们用f[ i ][ j ]来表示前 i 个物品放入到容量为 j 的背包中所能获得的最大价值。那么他的状态转移方程就为 f[ i ][ j ]=max(f[ i-1 ][ j ],f[ i-1 ][j-w[ i ] ]+v[ i ])。

我们来分析一下这个方程。 当选择第 i 个物品的时候,背包的容量为 j ,当我们不选择第 i 件物品的时候,那么这个决策的前一个转态就为前 i-1 个物品的时候容量为 j 。他的价值就为f[ i-1 ][ j ]。当我们选择第 i 件物品的时候。那么这个决策的的前一个转态就是前 i-1 个物品此时的容量为 j 个容量减去第 i 个物品的容量,那么前 i  个物品的的最大价值为f[ i-1 ][ j-w[ i ] ]+v[ i ]。不理解的可以列一个表格来找到其中的规律。

核心代码:

#include<iostream>
using namespace std;
int v[101],w[101];
int f[1005][1005];
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=m;i++)
      cin>>w[i]>>v[i];
    for(int i=1;i<=m;i++)
       for(int j=n;j>=0;j--)
            if(j>=w[i])
                f[i][j]=max(f[i-1][j-w[i]]+v[i],f[i-1][j]);
     cout<<f[m][n];
     return 0;      
}

第一层循环表示第 i 个物品,第二层循环表示背包的容量从最大一直循环到最小,从T——0这样可以避免每个物品被多次装入背包的情况。

 空间优化:01背包的时间我们已经不能再优化了,时间复杂度为O(T*n),但是空间可以优化。从上面的循环我们可以看出二维数组中的 i 表示第 i 个物品,但我们每次更新的是容量 j 和本次循环的所对应的最大价值,因此我们可以用一个一维数组来表示f[ j ]=max(f[ j ],f[ j-w[ i ] ]+v[ i ]

for(int i=1;i<=n;i++)
       for(int j=T;j>=0;j--)
            if(j>=w[i])
                f[j]=max(f[j],f[j-w[i]]+v[i])

在很多的背包问题中,我们可以发现问题有两种不同的问法,第一种是要求“背包装满时的价值最大”,第二种就是“背包可以不用装满”。对于这两种不同的问法,其实是f[]数组的初始化问题。

当题目要求我们将背包恰好装满是,我们只需要将f[0]=0,数组中的其他元素初始化为−∞。当题目不需要将背包装满,而只是求最大价值的时候,我们将f[]数组中的元素全都初始化为0。

典型例题:https://luogu.org/problem/P1048

二:完全背包

题目:有一个背包容量为T的背包,有n个物品,每个物品有对于的体积w[ i ],相应的价值v[ i ]。现要求求出背包可以装下的最大价值,每个物品可以装多次。

基本思路:完全背包类似与01背包,不同的是完全背包中的物品可以被多次转,那么就这不是简单的选与不选了,二十每个物品可以选0次,选一次,选两次。。。。。。

类似于01背包,我们同样要找出转态转移方程式,我们任然可以这样处理记f[ i ] [ j ]来表示背包容量为 j 时前 i 个物品所对应的价值,第 i 个物品不选,那么那么对应的价值为f[ i-1][ j ],

第 i 个选,对应的价值为f[ i ] [ j -w[ i ]]+v[ i ](注意这里的方程式与01背包方程式的不同)。那么对应的状态转移方程式为max(f[ i-1][ j ],f[ i ] [ j -w[ i ]]+v[ i ])

转化为01背包解决:

在解决01背包的时候,我们的背包容量(即第二层循环)是从V-0的,而不是从0-V。事实上,背包容量从V-0的目的是保证f[ i ] [ j ]是 f[ i-1 ][ j-w[i]]递推来的,这样就可以保证每一个物品只是被装了一次。相反的,要是我们想一个物品多次被装的话,那么背包容量就要从0-V。那么我们就可以保证f[ i ][ j ] 是从f[ i ][ j-w[ i ]]递推来的,这也是为什么这里是 i ,而不是 i-1的原因。

可以列两个表来辅助理解。

核心代码:

#include<iostream>
using namespace std;
int f[100000][100000];
int n,m;
int w[10001],v[10001];
int main()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++)
       cin>>w[i]>>v[i];
    for(int i=1;i<=m;i++)
       for(int j=w[i];j<=n;j++)
          f[i][j]=max(f[i][j],f[i][j-w[i]]+v[i]);
    cout<<f[m][n];
    return 0;
}

 同样的,这个二维数组也可以优化为一维数组。

for(int i=1;i<=n;i++)
      for(int j=0;j<=V;j++)
              if(j>=w[i])
                f[j]=max(f[j],f[j-w[i]]+w[i]);

典型例题 :https://www.luogu.org/problem/P1616

三:多重背包

题目:有一个容量为T的背包,现有n个物品,每个物品有对应的价值v[ i ],对应的体积我w[ i ],并且每个物品有 s[ i ]个,即每个物品有有限个。现要求装这些物品使价值最大。

基本思路:我们可以看出在这个题目中,每一个物品可以装0次,1次,2次。。。。。。这种装法与完全背包的策略略微相同。差别在于每一个物品是有限个,只能去k次(k<=s[ i ]),而不是像完全背包那样可以无限次的取。那么我们的所考虑的就是每一个物品要在这有限的个数中取多少个才能使背包所装的价值最大。在这里我们同样可以转化为01背包来解决。我们将每种物品看做01中的每一个物品。然后再在每种物品中去判断取0次,1次,2次。。。。。。。哪一种决策可以使价值最大。那么转态转移方程式就可以这样来写:

f[ i ][ j ]=max(f[ i-1 ][ j ],f[ i-1 ][j-k*w[ i ]]+k*v[ i ]);同样这个方程式与01背包的方程式类似,只是我们判断了取k次的结果与前一个转态的相比较。要判断每种物品要装多少次才能使背包所装价值最大,只需要加一个循环,k从0—s[ i ]。

代码:

#include<iostream>
using namespace std;
int N,V;
int w[200],v[200],s[200];
int f[200][200];
int main()
{
    cin>>N>>V;
    for(int i=1;i<=N;i++)
      cin>>w[i]>>v[i]>>s[i];
    for(int i=1;i<=N;i++)
      for(int j=V;j>=0;j--)
         for(int k=0;k<=s[i];k++)
             if(j>=k*w[i])
             f[i][j]=max(f[i-1][j],f[i-1][j-(k*w[i])]+k*v[i]);
    cout<<f[V];
    return 0;
 } 

 同样,这个二维数组也可以优化为一维数组。

for(int i=1;i<=N;i++)
      for(int j=V;j>=0;j--)
      {
         for(int k=0;k<=s[i];k++)
         {
             if(j>=k*w[i])
             f[j]=max(f[j],f[j-(k*w[i])]+k*v[i]);
         }   
       } 

 

 典型例题:https://www.acwing.com/problem/content/4/

四:混合背包

题目混合背包就是01背包,完全背包,多重背包的混合。现有一个容量为V的背包,有n个物品,其中有一部分物品只可以取一次,一部分物品可以取无限次,还有一部分物品只能取有限次,现要求求背包可以装的最大价值。

基本思路:几种背包混合,我们可以拆分开来就可以了,拆分成01背包,完全背包,多重背包,然后分开来计算就可以了。为了方便起见在这里用s[ i ]=1表示物品只取一次,s[ i ]=0表示物品可以无限次的取,是s[ i ]是一个非零的整数表示物品可以取有限次。利用这样的方法那么背包就被拆分成了其他三种背包了,在计算的时候,就只需要判断s[ i ]的值了。如果s[ i ]=0,即完全背包,第二层循环从0-v,如果s[ i ]!=0,即01背包和多重背包,由于这两种背包第二层循环都是从V-0,所以这两种背包可以放在一起处理。

代码:

#include<iostream>
using namespace std;
int w[100],v[100],s[100];
int f[1001];
int main()
{
    int N,V;
    cin>>V>>N;
    for(int i=1;i<=N;i++)
      cin>>w[i]>>v[i]>>s[i];
    for(int i=1;i<=N;i++)
      {
          if(s[i]!=0)//01背包和多重背包 
              for(int j=V;j>=0;j--)
              {
                  for(int k=0;k<=s[i];k++)
                   if(j>=k*w[i])
                      f[j]=max(f[j],f[j-k*w[i]]+k*v[i]);
              }
          else if(s[i]==0)//完全背包 
            for(int j=w[i];j<=V;j++)
              f[j]=max(f[j],f[j-w[i]]+v[i]);   
          }
    cout<<f[V];
    return 0;
} 

 典型例题:https://www.acwing.com/problem/content/7/

五:二维费用背包

题目:有一个容量为V的背包,并且背包能够有一个最大的承载重量M,现在有n个物品,每一个物品有对应的体积w[ i ],重量m[ i ],价值v[ i ],每个物品只能够装一次,现在要求背包能够装下的最大价值。

基本思路:二维背包与01背包类似,但是加了背包的限定条件,与前面对比,我们可以用二维数组来表示一维背包所能够装的价值,同样的,二维背包在一维背包的基础上加了一维,那么我们也就可以用三维数组来表示二维背包,f[ i ] [ j ] [ k ],其中 i 表示第 i 个物品,j 表示体积,k 用来表示重量。同理于01背包,用于每个物品只可以取一次,那么在循环的时候体积从V-0,重量从M-0。那么二维背包的状态转移方程式就可以写成这样:f[ i ] [ j ] [ k ]=max(f[ i-1 ] [ j ] [ k ],f [ i-1 ] [ j-w[ i ]] [ k-m[ i ]]+v[ i ])。类似于01背包,三维数组同样可以优化为二维数组

f [ j ] [ k ]=max(f [ j ] [ k ],f [ j-w[ i ]] [ k-m[ i ]]+v[ i ])

代码:

#include<iostream>
using namespace std;
int w[1001],m[1001],v[1001];
int f[1001][1001];
int main()
{
    int N,V,M;
    cin>>N>>V>>M;
    for(int i=1;i<=N;i++)
      cin>>w[i]>>m[i]>>v[i];
    for(int i=1;i<=N;i++)
      for(int j=V;j>=0;j--)
        for(int k=M;k>=0;k--)
        {
            if(j>=w[i]&&k>=m[i])
              f[j][k]=max(f[j][k],f[j-w[i]][k-m[i]]+v[i]);
        }
    cout<<f[V][M];
    return 0;    
}

二维背包与其他背包混合:前面提到的是为二维01背包,二维背包还可以与其他背包混合在一起,如每个物品可以取无限次,那么就是二维完全背包,每个物品只能取有限次,那么就是二维多重背包。。。。。。,可以像一维背包那样改变循环来处理。不管是哪一种背包类类型,只要将一维背包中的几种背包弄懂了,二维背包也就不是问题。

 典型例题:https://www.acwing.com/problem/content/8/

六:分组背包

题目:有一个背包容量为V的背包,有n个物品,第 i 个物品的体积为w[ i ],价值为v[ i ],现在将些物品分为k组。问在每组中最多取一件物品的情况下,背包能够装的最大价值是多少。

基本思路:现在将这些物品分为了k组,那我们首先想到的就是在加一层循环,用来遍历每一组,再在每一组来遍历每一个物品,来决策装哪一个物品才能使价值最大。那么第一层循环就可以从1——k;由于每一组中的物品只可以取一件,类比01背包,那么第二层循环就可以从V——0,;第三层循环用来遍历每一组中的每一个物品。那么分组背包的状态转移方程式就可以这样来写:f[ j ]=max(f[ j ],f[ j-w[ i ]]+v[ i ]

代码:

#include<iostream>
using namespace std;
int f[1001],k_w[1001][1001],k_v[1001][1001];//K_w//表示第k组的第i个物品的体积,k_v同理 
int main()
{
    int K,V;
    cin>>K>>V;
     for(int i=1;i<=K;i++)
      {
          int n;
          cin>>n;
          k_w[i][0]=n;//k_w[0]用来表示每组有多少个物品 
          for(int j=1;j<=n;j++)
              cin>>k_w[i][j]>>k_v[i][j];
      }
      for(int i=1;i<=K;i++)//第一层循环,遍历每一组 
        for(int j=V;j>=0;j--)//第二层循环,与01背包功能一样 
          for(int k=1;k<=k_w[i][0];k++)//第三层循环,遍历每一组中的每一个物品 
            if(j>=k_w[i][k])
              f[j]=max(f[j],f[j-k_w[i][k]]+k_v[i][k]);
    cout<<f[V];
    return 0;
} 

 

典型例题:https://www.acwing.com/problem/content/9/

七:有依赖的背包

题目:这种背包题目与前面的背包问题类似,但是现在在原来的背包问题之上加了一个条件:每一个物品(主件)现在有一些附件,现在的规则就是,你要买附件,就必须买主件,也可以只买主件。要求求背包可以装下的最大价值。

基本思路:对于第 k 个物品组中的 物品,所有费用相同的物品只留一个价值最大的,不影响结果。所以,可以对主件 k 的 “附件集合”先进行一次 01 背包,得到费用依次为 0...V −Ck 所有这些值时相应的最 大价值 Fk[0...V −Ck]。那么,这个主件及它的附件集合相当于 V −Ck + 1 个物品的 物品组,其中费用为 v 的物品的价值为 Fk[v−Ck]+Wk,v 的取值范围是 Ck ≤ v ≤ V 。 也就是说,原来指数级的策略中,有很多策略都是冗余的,通过一次 01 背包后, 将主件 k 及其附件转化为 V −Ck + 1 个物品的物品组,就可以直接应用分组背包的算法就可以了。

 

 

 

 

 

转载于:https://www.cnblogs.com/zhoubo123/p/11570633.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

背包问题 的相关文章

  • node多版本安装--nvm丝滑切换node版本

    以下是我总结得俩种nvm切换node版本的方式 首先是第一种 需要手动配置的 第一步把自己电脑上面的node卸载 在本机应用程序中卸载 然后手动本机目录删除剩余残留node npm等文件 C Users 86184 AppData C Us
  • 函数的极值点、零点、驻点、拐点的理解

    总结 零点 函数值为0的点 极值点 函数单调性发生变化的点 驻点 函数的一阶导数为0的点 拐点 函数凹凸性变化的点 学习链接 https wenku baidu com view 4a009cf5650e52ea5418982e html
  • [工程数学]1_特征值与特征向量

    首先向b站up DR CAN致敬 视频二刷了 为了收获 理解更多 用极慢的方式 把笔记抄了下来 整理一遍 为了好翻阅 后续会转成pdf格式 放微信公众号后台获取 现代控制理论 2 state space状态空间方程 在state space
  • java是什么_Java是什么?Java有什么用?

    我们经常提到Java 很多小白只听说过但对其并没有太多具体的了解 那么Java是什么 Java有什么用 今天就来探讨一下 我们常常会听说 Java是世界第一语言 很多应用软件的开发都离不开Java Java真的这么强大吗 其实 Java的内
  • 多链路传输技术在火山引擎 RTC 的探索和实践

    动手点关注 干货不迷路 传统的数据传输方式大多是利用一个链路 选择设备的默认网卡进行传输 使用这种方式实现实时音视频通话时 如果默认网络出现问题 如断网 弱网等 用户的通信就会发生中断或者卡顿 影响用户体验 多链路传输 顾名思义 就是使用多
  • electron_vue—实现消息通知 及 解决通知不显示问题

    实现消息通知 window linux macOS 这三个操作系统都为应用程序提供了向用户发送通知的方法
  • python使用pip安装出现pip is configured with locations that require TLS/SSL异常处理方法

    问题描述 最近给服务器安装python环境 通过源码方式安装Python3 8之后 使用pip功能出现异常 提示 root localhost pip3 install you get pip is configured with loca
  • 大数据处理中的关键算子:分割(Split)和选择(Select)

    在大数据处理中 分割 Split 和选择 Select 是两个常用的算子 它们在数据转换和处理过程中发挥着重要的作用 本文将详细介绍这两个算子的功能和使用方法 并附上相应的源代码示例 1 分割 Split 分割算子用于将一个数据集拆分成多个
  • 图的深度遍历和广度遍历

    理论部分 图的深度遍历和广度遍历都不算很难像极了二叉树的前序遍历和层序遍历 如下面的图 可以用右边的邻接矩阵进行表示 假设以顶点0开始对整幅图进行遍历的话 两种遍历方式的思想如下 1 深度优先遍历 depthFirstSearch DFS
  • LISN到底是啥?干啥用的?

    LISN到底是啥 干啥用的 LISN是在EMC测试的时候 会被使用的设备 如下图所示 双路V型电源阻抗稳定网络 它完全符合CISPR16 1 2 MIL STD 461F VDE 0876 FCC Part 15标准的要求 其等效电路为50
  • 20191004

    A 解 1 我们发现只需要关心处于结果字符串前 k 位的字符 因此考虑从后往前处理 对于一个询问区间 我们暴力连边 用并查集维护 x 的父亲等于 y 相当于位于 x 的字符是从位于 y 的字符处复制过来的 然后删掉这个区间 更新其他元素的排
  • Hutool BeanUtils.copyProperties的四种用法 空不拷贝/忽略拷贝/空不和忽略拷贝/全拷贝

    关注公众号 奇叔码技术 回复 java面试题大全 或者 java面试题 即可领取资料 一 Hutool BeanUtils copyProperties的四种用法 空不拷贝 忽略拷贝 空不和忽略拷贝 全拷贝 1 第一种用法 BeanUtil
  • STM32-CubeMX学习笔记

    例程参考链接 http bbs elecfans com jishu 714935 1 1 html 1 首次使用参见文档 http blog csdn net tq384998430 article details 53466263 2
  • 彻底搞懂Java中的synchronized关键字

    synchronized的作用 synchronized 的作用主要有三 原子性 所谓原子性就是指一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断 要么就都不执行 被synchronized修饰的类或对象的所有操作都是原子
  • 【歪门邪道】懒得麻烦UI同学切图所以用AndroidStudio生成icon

    每次新建项目 是不是都默认生成一个 ic launcher 对于这个icon 你是不是从来都是一删了事 你有没有一次 打开并留意过里头 ic launcher foreground 和 ic launcher background 文件 如
  • 关于以太坊的nonce值

    文章目录 每笔交易nonce值的各个情况 总结 关于Nonce的保管 依赖节点 自行管理nonce 参考代码 nonce在区块链中是一个非常重要的概念 从比特币到以太坊都有nonce的身影 在比特币中 nonce主要用于调整pow挖矿的难度
  • Go语言学习——4、数据存储:数组,切片,映射

    目录 一 数组 1 声明数组 2 初始化数组 3 遍历数组 二 切片 1 从数组或切片生成新的切片的语法格式 2 直接生成一个新的切片 3 切片添加元素 4 从切片删除元素 5 遍历切片 三 映射 1 声明映射 2 初始化映射 3 遍历映射
  • Linux--僵死进程(僵尸进程)

    1 僵死进程产生的原因或者条件 当子进程先于父进程结束 父进程没有获取子进程的退出码 此时子进程变成僵死进程 即就是子进程结束了 但父进程还没有结束的时候才会出现僵死进程 代码中 子先于父 后台运行 当一个进程结束的时候 只有进程的退出码被
  • 前端 token 应该放在哪里呢?

    总结 反正是服务端加密的传过来让前端存着的 通常的存储都可以放 只不过需要防范攻击就是了 风险 放在 webStorage 里的话 因为同源策略 可以在当前页面中注入脚本进行 xss 攻击来获取信息 比如在一个帖子下面回复了一串 js 脚本
  • 点云数据下的KD-tree

    点云数据下的KD tree检索 数据结构 构建KD tree 最近邻检索 KD tree简称K维树 是一种空间划分的数据结构 常被用于高维空间中的搜索 比如范围搜索和最近邻搜索 kd tree是二进制空间划分树的一种特殊情况 在激光雷达SL

随机推荐

  • go mod vender package io/fs is not in GOROOT (/usr/local/go/src/io/fs)

    一 问题解决 最近写区块链相关项目时候 对于智能合约部署时对其进行vender时报错 io fs is not in GOROOT usr local go src io fs 搜索了一下是因为go版本问题 我原本是1 15 5的版本 后来
  • 实施MES系统有何难点,以及怎么解决?

    实施MES系统有何难点 以及怎么解决 很多制造企业当前对于MES系统还处于认知阶段 制造业管理者们在不断了解MES系统的过程中 发现实施MES并没有想象中的简单 一个成熟的MES系统要经历哪些难点 如何更好的解决 一 MES系统有哪些实施难
  • Docker之DockerFile相关基础知识

    DockerFile相关基础知识 一 Docker镜像原理 1 操作系统组成部分 1 1 七大子系统 1 2 Linux文件系统 2 Docker镜像原理介绍 2 1 原理图 2 2 Docker镜像本质 2 3 统一文件系统 2 4 复用
  • react配置项目路径别名@

    为什么有的项目引入路径写 可以 自己的不行呢 因为别人的项目是配置过路径别名的 就表示src目录 因此我们也需要配置一遍 以下是react项目示范 vue项目同理 ts对 指向src目录的提示是不支持的 vite默认也不支持 所以需要手动配
  • 如何计算TCP吞吐量

    为什么80 的码农都做不了架构师 gt gt gt FROM how to calculate tcp throughput for long distance links 如何计算广域网链路的 TCP 吞吐量 刚刚点亮数据中心之间的高速网
  • Linux IP出现inet6 addr :fe80::20c:29ff:fe47:fd61/64 scope:l

    经常出现 inet6 addr fe80 20c 29ff fe47 fd61 64 scope link1 这种情况的不要担心了 试试这个方法 这也是我折磨了好多天整理的 不喜勿喷 谢谢 虚拟机设置权限 sudo chown book b
  • Git学习笔记

    配置user信息 配置user name git config global user name your name 配置user email git config global user email your email 查看所有配置信息
  • Jenkins中连接Git仓库时提示:无法连接仓库:Error performing git command: git ls-remote -h

    问题 Jenkins中连接Git仓库时提示 无法连接仓库 Error performing git command git ls remote h 原因 git的账号密码错误 解决方案 重新设置账号密码 操作 控制面板 凭证管理器 wind
  • 有趣的异常

    缘起 最近 在项目中遇到一个有趣的异常 在没附加调试器的情况下会直接崩溃 附加调试器后 会中断到调试器中 但是按 F5 继续运行后 程序还能继续执行 interesting 你能猜出这是个什么异常吗 初遇错误 在测试程序功能的时候 意外的崩
  • 【教程】一款Markdown 编辑器,免费版本 Typora 下载与使用.

    csdn资源老挂 再补一个网盘的 哪个能用用哪个吧 链接 https pan baidu com s 19c MJQRuas9v5lHxF1uB6A pwd f3n5 提取码 f3n5 gt gt 资源 lt
  • EXCEL-数据透视表、日数据整理成月数据

    1 当你面对一个很多年的日数据 想要把它整理成月数据 下图是2015年1月到2022年1月的日数据 2 首先我们把没用的信息挪开 在时间和日数据上加个表头 3 接着选中数据 包括表头 点击 插入 数据透视表 4 跳出来的框框 直接确认 5
  • AppsFlyer 研究(四)OneLink Deep Linking Guide

    一 简介 深度链接是指当用户打开移动应用时向其提供个性化的内容 或将用户带到应用内特定位置的操作 通过这种操作 您可以为用户提供优质的用户体验 从而极大加强用户与应用的互动 两种深度链接类型 由于用户不一定安装了移动应用 所以有两种深度链接
  • 曾经被视为「牛市制造机」们的机构巨鲸,如今都怎么了?

    这是白话区块链的第1790期原创 作者 Terry出品 白话区块链 ID hellobtc 11 月 17 日 萨尔瓦多总统 Nayib Bukele 表示 从明天开始 我们将每天购买一个比特币 直接开始了国家级别的比特币定投之旅 相信不少
  • 【图片二值化处理,以及byte[] 与bitmap互相转化问题】

    1 byte与bitmap相互转换 将byte流转换为bitmap byte signature item ToArray MemoryStream ms1 new MemoryStream signature Bitmap bm Bitm
  • 打开ABAQUS时,显示找不到 MFC140U.DLL 文件,打不开软件,亲测解决

    打开ABAQUS时 显示找不到 MFC140U DLL 文件 打不开软件 如何解决 下载了X64版本的 安装完毕后就可以打开了 Microsoft Visual C 2017 Redistributable 32位链接 link 64位链接
  • 时钟同步-注意客户端和服务端都需要开启123端口 udp协议

    确认时钟源 chronyc sources v chronyc tracking Linux Chronyd时间同步服务器详解 wangjie722703的博客 CSDN博客 local stratum 10 即使自己未能通过网络时间服务器
  • pytorch-lightning如何设置训练epoch

    Trainer初始化时添加max epochs参数 init model autoencoder LitAutoEncoder trainer pl Trainer gpus 8 max epochs 50 trainer fit auto
  • iOS uiscrollView 嵌套 问题 的解决

    苹果官方文档里面提过 最好不要嵌套scrollView 特别提过UITableView和UIWebView 因为在滑动时 无法知道到底是希望superScrollView滑动还是subScrollView滑动 一旦出现这种情况 情况就出乎我
  • 一文了解websocket全双工通信java实现&socket地址404问题解决

    websocket介绍 1 websocket介绍 1 1注解介绍 2 demo 2 1 后端代码 2 2 前端代码 2 3 效果 附录 socket地址404问题解决 1 websocket介绍 WebSocket是一种在单个TCP连接上
  • 背包问题

    一 01背包 题目 有一个容量为T的背包 现有n个物品 每个物品有都有一个体积w i 和自身价值v i 现在要求求出背包能够装的物品的价值最大 每个物品只可以装一次 基本思路 01背包是背包中的最基础的问题 后面很多背包问题都是01背包和完