背包问题

目录

开端

01背包问题

AcWing 01背包问题

Luogu P2925干草出售

Luogu P1048采药

完全背包问题

AcWing 完全背包问题

Luogu P1853投资的最大效益

多重背包问题

AcWing 多重背包问题 I

AcWing 多重背包问题 II

Luogu P1776宝物筛选

混合背包问题

AcWing 混合背包问题

Luogu P1833樱花

二维费用背包问题

AcWing 二维费用的背包问题 

Luogu P1507NASA的食物计划

分组背包问题

AcWing 分组背包问题

Luogu P1757 通天之分组背包


开端

关于背包问题,嗯一直学不明白,暑假咸的没事又拾起来学了一下,跟着这位大佬整理的思路(背包九讲——全篇详细理解与代码实现-CSDN博客),对背包的思想有了一定清晰的理解,大佬的文章有些长,所以跟着自己的思路再整理一下。

为了方便统一,先定义一下

c[i]:表示代价

w[i]:表示价值

dp[i][j]:表示前i个物品花费代价为j的可以获得的最大代价

p[i]:表示第i种物品最多有p[i]件

01背包问题

定义:

dp[i][j]:表示前i个物品恰放入一个容量为j的背包下可以获得的最大代价

子问题第i1件物品状态:

①不选:dp[i][j]=dp[i-1][j]②选:dp[i][j]=dp[i][j-c[i]]+w[i]

状态转移方程:

dp[i][j]=max(dp[i-1][j],dp[i][j-c[i]]+w[i])

优化空间复杂度:

O(V*N)

for(int i=1;i<=n;i++)for(int j=c[i];j<=V;j--)dp[i][j]=max(dp[i-1][j],dp[i-1][j-c[i]]+w[i]);

O(V)

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

关于顺序和逆序:

逆序表示:dp[j]=max(dp[j],dp[j-c[i]]+w[i])由dp[i][j]=max(dp[i-1][j],dp[i-1][j-c[i]]+w[i])转移过来的
顺序表示:dp[j]=max(dp[j],dp[j-c[i]]+w[i])由dp[i][j]=max(dp[i][j],dp[i][j-c[i]]+w[i])转移过来的

初始化问题:

①要求恰好装满:dp[i]=-∞,dp[0]=0;②只要求价值最大:dp[i]=0;

 AcWing 01背包问题

const int N = 1010;
int c[N], w[N], dp[N];
inline void solve()
{int N, V;cin >> N >> V;for (int i = 1; i <= N; i++)cin >> c[i] >> w[i];for (int i = 1; i <= N; i++)for (int j = V; j >= c[i]; j--)dp[j] = max(dp[j], dp[j - c[i]] + w[i]);cout << dp[V] << endl;
}

Luogu P2925干草出售

const int N = 5e4 + 10;
int w[N], dp[N];
inline void solve()
{int C, H;cin >> C >> H;for (int i = 1; i <= H; i++)cin >> w[i];for (int i = 1; i <= H; i++)for (int j = C; j >= w[i]; j--)dp[j] = max(dp[j], dp[j - w[i]] + w[i]);cout << dp[C] << endl;
}

Luogu P1048采药

const int N = 1010;
int c[N], w[N], dp[N];
inline void solve()
{int T, M;cin >> T >> M;for (int i = 1; i <= M; i++)cin >> c[i] >> w[i];for (int i = 1; i <= M; i++)for (int j = T; j >= c[i]; j--)dp[j] = max(dp[j], dp[j - c[i]] + w[i]);cout << dp[T] << endl;
}

完全背包问题

 定义:

dp[i][j]:表示前i种物品恰放入一个容量为j的背包下可以获得的最大代价

子问题第i种物品状态:

①不选该种物品:dp[i][j]=dp[i-1][j];
②选不同件该种物品:选0件、1件、2件……k件:dp[i][j]=dp[i-1][j-c[i]*k]+w[i]*k;

状态转移方程:

dp[i][j]=max(dp[i-1][j-c[i]*k]+w[i]*k)  0<=c[i]*k<=j

优化空间复杂度:

O(N*∑(V/c[i]))

for(int i=1;i<=n;i++)for(int j=c[i];j<=V;j++)for(int k=0;c[i]*k<=j;k++)dp[i][j]=max(dp[i][j],dp[i-1][j-c[i]*k]+w[i]*k);
# 第一个参数,因为k=0时就相当于dp[i-1][j];

O(V*N)转化为01背包问题

for(int i=1;i<=n;i++)for(int j=c[i];j<=j;j++)dp[j]=max(dp[j],dp[j-c[i]]+w[i]);
//等价于dp[i][j]=max(dp[i-1][j],dp[i][j-c[i]]+w[i]);(不取该物品,取不同件);

关于顺序和逆序:

逆序表示:dp[j]=max(dp[j],dp[j-c[i]]+w[i])由dp[i][j]=max(dp[i-1][j],dp[i-1][j-c[i]]+w[i])转移过来的
顺序表示:dp[j]=max(dp[j],dp[j-c[i]]+w[i])由dp[i][j]=max(dp[i-1][j],dp[i][j-c[i]]+w[i])转移过来的

初始化问题:

①要求恰好装满:dp[i]=-∞,dp[0]=0;②只要求价值最大:dp[i]=0;

AcWing 完全背包问题

const int N = 1010;
int c[N], w[N], dp[N];
inline void solve()
{int N, V;cin >> N >> V;for (int i = 1; i <= N; i++)cin >> c[i] >> w[i];for (int i = 1; i <= N; i++)for (int j = c[i]; j <= V; j++)dp[j] = max(dp[j], dp[j - c[i]] + w[i]);cout << dp[V] << endl;
}

Luogu P1853投资的最大效益

const int N = 1e6 + 10;
int c[N], w[N], dp[N];
inline void solve()
{int s, n, d;cin >> s >> n >> d;for (int i = 1; i <= d; i++)cin >> c[i] >> w[i];while (n--){for (int i = 1; i <= d; i++)for (int j = c[i]; j <= s; j++)dp[j] = max(dp[j], dp[j - c[i]] + w[i]);s += dp[s];}cout << s << endl;
}
int main(

这个题目有个小坑

所以要做一下处理:除以1000防止爆空间

const int N = 1e6 + 10;
int c[N], w[N], dp[N];
inline void solve()
{int s, n, d;cin >> s >> n >> d;for (int i = 1; i <= d; i++)cin >> c[i] >> w[i];while (n--){for (int i = 1; i <= d; i++)for (int j = c[i] / 1000; j <= s / 1000; j++)dp[j] = max(dp[j], dp[j - c[i] / 1000] + w[i]);s += dp[s / 1000];}cout << s << endl;
}

多重背包问题

  定义:

dp[i][j]:表示前i种物品恰放入一个容量为j的背包下可以获得的最大代价

子问题第i种物品状态:

①不选该种物品:dp[i][j]=dp[i-1][j];
②选不同件该种物品:选1件、2件……p[i]件:dp[i][j]=dp[i-1][j-c[i]*k]+w[i]*k;

状态转移方程:

dp[i][j]=max(dp[i-1][j-c[i]*k]+w[i]*k)  0<=k<=p[i]

转化为01背包问题:

方法一:O(V*∑p[i])

for(int i=1;i<=n;i++)for(int j=V;j>=c[i];j--)for(int k=1;c[i]*k<=j&&k<=p[i];k++)dp[j]=max(dp[j],dp[j-c[i]*k]+w[i]*k);
# 第一个参数,因为k=0时就相当于dp[i-1][j];

方法二:二进制优化O(N*log(p)*V)

for (int i = 1; i <= N; i++){int a, b, s;cin >> a >> b >> s;int k = 1;while (k <= s)  //0……2^k-1部分的系数1,2,4,8……{cnt++;c[cnt] = k * a;w[cnt] = k * b;s -= k;k *= 2;}if (s > 0)  //2^k……s部分的系数 s-2^k{cnt++;c[cnt] = s * a;w[cnt] = s * b;}}N = cnt;  //更新总数量for (int i = 1; i <= N; i++)  //01背包问题for (int j = V; j >= c[i]; j--)dp[j] = max(dp[j], dp[j - c[i]] + w[i]);
 for (int i = 1; i <= n; i++){cin >> c[i] >> w[i] >> p[i];int s = min(p[i], W / w[i]);for (int k = 1; s > 0; k <<= 1){k = min(k, s);s -= k;for (int j = W; j >= k * w[i]; j--){dp[j] = max(dp[j], dp[j - k * w[i]] + k * c[i]);}}}

初始化问题:

①要求恰好装满:dp[i]=-∞,dp[0]=0;②只要求价值最大:dp[i]=0;

方法一:

AcWing 多重背包问题 I

const int N = 110;
int c[N], w[N], p[N], dp[N];
inline void solve()
{int N, V;cin >> N >> V;int cnt = 0;for (int i = 1; i <= N; i++)cin >> c[i] >> w[i] >> p[i];for (int i = 1; i <= N; i++)for (int j = V; j >= c[i]; j--)for (int k = 1; c[i] * k <= j && k <= p[i]; k++)dp[j] = max(dp[j], dp[j - c[i] * k] + w[i] * k);cout << dp[V] << endl;
}

方法二:

AcWing 多重背包问题 II

const int N = 20010;  //注意初始化,否则会越界
int c[N], w[N], dp[N];
inline void solve()
{int N, V;cin >> N >> V;int cnt = 0;for (int i = 1; i <= N; i++){int a, b, s;cin >> a >> b >> s;int k = 1;while (k <= s)  //0……2^k-1部分的系数1,2,4,8……{cnt++;c[cnt] = k * a;w[cnt] = k * b;s -= k;k *= 2;}if (s > 0)  //2^k……s部分的系数 s-2^k{cnt++;c[cnt] = s * a;w[cnt] = s * b;}}N = cnt;  //更新总数量for (int i = 1; i <= N; i++)  //01背包问题for (int j = V; j >= c[i]; j--)dp[j] = max(dp[j], dp[j - c[i]] + w[i]);cout << dp[V] << endl;
}

Luogu P1776宝物筛选

const int N = 1e6 + 10; // 注意初始化,否则会越界
int c[N], w[N], dp[N];
inline void solve()
{int n, W;cin >> n >> W;int cnt = 0;for (int i = 1; i <= n; i++){int a, b, s;cin >> a >> b >> s;int k = 1;while (k <= s){cnt++;w[cnt] = k * a;c[cnt] = k * b;s -= k;k *= 2;}if (s > 0){cnt++;w[cnt] = s * a;c[cnt] = s * b;}}n = cnt;for (int i = 1; i <= n; i++)for (int j = W; j >= c[i]; j--)dp[j] = max(dp[j], dp[j - c[i]] + w[i]);cout << dp[W] << endl;
}

简化

const int N = 1e6 + 10; // 注意初始化,否则会越界
int c[N], w[N], p[N], dp[N];
inline void solve()
{int n, W;cin >> n >> W;for (int i = 1; i <= n; i++){cin >> c[i] >> w[i] >> p[i];int s = min(p[i], W / w[i]);for (int k = 1; s > 0; k <<= 1){k = min(k, s);s -= k;for (int j = W; j >= k * w[i]; j--){dp[j] = max(dp[j], dp[j - k * w[i]] + k * c[i]);}}}cout << dp[W] << endl;
}

混合背包问题

 01背包、完全背包、多重背包的混合状态转移:

for (int i = 1; i <= N; i++){cin >> c[i] >> w[i] >> p[i];// 01背包if (p[i] == -1)for (int j = V; j >= c[i]; j--)dp[j] = max(dp[j], dp[j - c[i]] + w[i]);// 完全背包else if (p[i] == 0)for (int j = c[i]; j <= V; j++)dp[j] = max(dp[j], dp[j - c[i]] + w[i]);// 多重背包二进制优化else{int s = min(p[i], V / c[i]);for (int k = 1; s > 0; k <<= 1){k = max(k, s);s -= k;for (int j = V; j >= k * c[i]; j--)dp[j] = max(dp[j], dp[j - k * c[i]] + k * w[i]);}}}

AcWing 混合背包问题

const int N = 1e6 + 10; // 注意初始化,否则会越界
int c[N], w[N], p[N], dp[N];
inline void solve()
{int N, V;cin >> N >> V;for (int i = 1; i <= N; i++){cin >> c[i] >> w[i] >> p[i];// 01背包if (p[i] == -1)for (int j = V; j >= c[i]; j--)dp[j] = max(dp[j], dp[j - c[i]] + w[i]);// 完全背包else if (p[i] == 0)for (int j = c[i]; j <= V; j++)dp[j] = max(dp[j], dp[j - c[i]] + w[i]);//或将完全背包转化为多重01背包s=V/c[i]// 多重背包二进制优化else{int s = min(p[i], V / c[i]);for (int k = 1; s > 0; k <<= 1){k = min(k, s);s -= k;for (int j = V; j >= k * c[i]; j--)dp[j] = max(dp[j], dp[j - k * c[i]] + k * w[i]);}}}cout << dp[V] << endl;
}

Luogu P1833樱花

const int N = 1e6 + 10; // 注意初始化,否则会越界
int c[N], w[N], p[N], dp[N];
inline void solve()
{int m1, m2, s1, s2, N;scanf("%d:%d %d:%d %d", &m1, &s1, &m2, &s2, &N);int V = m2 * 60 + s2 - m1 * 60 - s1;for (int i = 1; i <= N; i++){cin >> c[i] >> w[i] >> p[i];int s;if (p[i] == 0) // 完全转化为多重s = V / c[i];elses = min(p[i], V / c[i]);for (int k = 1; s > 0; k <<= 1){k = min(k, s);s -= k;for (int j = V; j >= k * c[i]; j--)dp[j] = max(dp[j], dp[j - k * c[i]] + k * w[i]);}}cout << dp[V] << endl;
}

二维费用背包问题

 定义:每件物品需要同时花费两种不同的代价

dp[i][j][k]:表示前i种物品付出两种代价分别最大为j和k时可获得的最大价值

状态转移方程:

dp[i][j][k]=max(dp[i-1][j][k],dp[i-1][j-c[i]][k-m[i]]+w[i])  

01背包代码(完全背包、多重背包可以类比)

for(int i=1;i<=n;i++)for(int j=V;j>=c[i];j--)for(int k=M;k>=m[i];k--)dp[j][k]=max(dp[j][k],dp[j-c[i]][k-m[i]]+w[i]);

AcWing 二维费用的背包问题 

const int N = 1010; // 注意初始化,否则会越界
int c[N], w[N], m[N], dp[N][N];
inline void solve()
{int N, V, M;cin >> N >> V >> M;for (int i = 1; i <= N; i++){cin >> c[i] >> m[i] >> w[i];for (int j = V; j >= c[i]; j--)for (int k = M; k >= m[i]; k--)dp[j][k] = max(dp[j][k], dp[j - c[i]][k - m[i]] + w[i]);}cout << dp[V][M] << endl;
}

Luogu P1507NASA的食物计划

const int N = 1010; // 注意初始化,否则会越界
int c[N], w[N], m[N], dp[N][N];
inline void solve()
{int V, M, N;cin >> V >> M >> N;for (int i = 1; i <= N; i++){cin >> c[i] >> m[i] >> w[i];for (int j = V; j >= c[i]; j--)for (int k = M; k >= m[i]; k--)dp[j][k] = max(dp[j][k], dp[j - c[i]][k - m[i]] + w[i]);}cout << dp[V][M] << endl;
}

分组背包问题

  定义:

dp[k][j]:表示前k组物品花费代价j能取得的最大价值

子问题第k组物品状态:

①不选该组物品:dp[k][j]=dp[k-1][j];
②选该组物品:dp[k][j]=dp[k-1][j-c[i]+w[i]] 物品i属于k组

状态转移方程:

dp[k][j]=max(dp[k-1][j],dp[k-1][j-c[i]]+w[i])  

模板:

 for (int k = 1; k <= N; k++){int s;cin >> s; // 第k组的物品数量for (int i = 1; i <= s; i++)cin >> c[i] >> w[i]; // 组中每个物品i的属性for (int j = V; j >= 0; j--)for (int i = 1; i <= s; i++) // 保证每组物品只能选一个,可以覆盖之前组内物品最优解的来取最大值if (j >= c[i])dp[j] = max(dp[j], dp[j - c[i]] + w[i]);}

AcWing 分组背包问题

const int N = 110; // 注意初始化,否则会越界
int c[N], w[N], m[N], dp[N];
inline void solve()
{int N, V;cin >> N >> V;for (int k = 1; k <= N; k++){int s;cin >> s; // 第k组的物品数量for (int i = 1; i <= s; i++)cin >> c[i] >> w[i]; // 组中每个物品i的属性for (int j = V; j >= 0; j--)for (int i = 1; i <= s; i++) // 保证每组物品只能选一个,可以覆盖之前组内物品最优解的来取最大值if (j >= c[i])dp[j] = max(dp[j], dp[j - c[i]] + w[i]);}cout << dp[V] << endl;
}

Luogu P1757 通天之分组背包

const int N = 110;  // 注意初始化,否则会越界
const int M = 1010; // 注意初始化,否则会越界
int c[M], w[M], dp[M];
int g[N][N], b[M]; // g[k][i]表示小组k种第i个物品的编号,b[k]表示小组k的物品+1;
inline void solve()
{int N, V;cin >> V >> N;int t = 0, k = 0;for (int i = 1; i <= N; i++){cin >> c[i] >> w[i] >> k;t = max(t, k);  // 求小组的组数b[k]++;         // 小组k的物品+1;g[k][b[k]] = i; // 小组k中第b[k]个物品的编号为i;}for (int k = 1; k <= t; k++)for (int j = V; j >= 0; j--)for (int i = 1; i <= b[k]; i++)if (j >= c[g[k][i]])dp[j] = max(dp[j], dp[j - c[g[k][i]]] + w[g[k][i]]);cout << dp[V] << endl;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/93109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QCefView 简介

什么是QCefView QCefView 是为 Qt 开发的一个封装集成了CEF(Chromium Embedded Framework)库的Wdiget UI组件。使用QCefView可以充分发挥CEF丰富强大的Web能力&#xff0c;快速开发混合架构的应用程序。它不需要开发者理解CEF的细节&#xff0c;能够在Qt中更容易的使用CEF&…

IDEA的使用

文章目录 1.IDEA配置1.1 idea界面说明1.2 git1.3 JDK1.4 maven1.5 Tomcat1.6 idea设置编码格式1.7 vscodenodejs1.8 windows下安装redis 2. IDEA问题2.1 setAttribute方法爆红2.2 idea cannot download sources解决办法2.3 springboot项目跑起来不停run 3. vscode3.1 vscode显示…

c++三大概念要分清--重载,隐藏(重定义),覆盖(重写)

目 录 一、重载 **&#xff08;1&#xff09;概念&#xff1a;**在同一个作用域内&#xff1b;函数名相同&#xff0c;参数列表不同&#xff08;参数个数不同&#xff0c;或者参数类型不同&#xff0c;或者参数个数和参数类型都不同&#xff09;&#xff0c;返回值类型可相同也…

uniapp项目实践总结(二十五)苹果 ios 平台 APP 打包教程

导语:当你的应用程序开发完成后,在上架 ios 应用商店之前,需要进行打包操作,下面就简单介绍一下打包方法。 目录 准备工作注册账号生成证书打包配置准备工作 在打包之前,请保证你的 uniapp 应用程序编译到 ios 模拟器或者是真机调试基座环境下是可以正常运行的,苹果打包…

input输入表头保存excel文件

input输入表头 input输入表头 &#xff08;input内除了/&#xff0c;空格 回车 标点符号等 全部作为单元格分隔符&#xff09;保存/storage/emulated/0/代码文件/ 没有就创建文件名命名方法&#xff1a;编号. 库 时间戳嗨&#xff01;听说你有个需求&#xff0c;想根据用户输入…

CSS基础语法第二天

目录 一、复合选择器 1.1 后代选择器 1.2 子代选择器 1.3 并集选择器 1.4 交集选择器 1.4.1超链接伪类 二、CSS特性 2.1 继承性 2.2 层叠性 2.3 优先级 基础选择器 复合选择器-叠加 三、Emmet 写法 3.1HTML标签 3.2CSS 四、背景属性 4.1 背景图 4.2 平铺方式 …

使用sqlmap的 ua注入

文章目录 1.使用sqlmap自带UA头的检测2.使用sqlmap随机提供的UA头3.使用自己写的UA头4.调整level检测 测试环境&#xff1a;bWAPP SQL Injection - Stored (User-Agent) 1.使用sqlmap自带UA头的检测 python sqlmap.py -u http://127.0.0.1:9004/sqli_17.php --cookie“BEEFHOO…

01-Zookeeper特性与节点数据类型详解

上一篇&#xff1a; 在了解Zookeeper之前&#xff0c;需要对分布式相关知识有一定了解&#xff0c;什么是分布式系统呢&#xff1f;通常情况下&#xff0c;单个物理节点很容易达到性能&#xff0c;计算或者容量的瓶颈&#xff0c;所以这个时候就需要多个物理节点来共同完成某项…

C++ 重载运算符和重载函数

C 允许在同一作用域中的某个函数和运算符指定多个定义&#xff0c;分别称为函数重载和运算符重载。 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明&#xff0c;但是它们的参数列表和定义&#xff08;实现&#xff09;不相同。 当您调用一个重…

【论文极速读】Prompt Tuning——一种高效的LLM模型下游任务适配方式

【论文极速读】Prompt Tuning——一种高效的LLM模型下游任务适配方式 FesianXu 20230928 at Baidu Search Team 前言 Prompt Tuning是一种PEFT方法&#xff08;Parameter-Efficient FineTune&#xff09;&#xff0c;旨在以高效的方式对LLM模型进行下游任务适配&#xff0c;本…

基于大语言模型扬长避短架构服务

秘诀&#xff1a; 扬泛化之长&#xff0c; 避时延之短

CocosCreator3.8研究笔记(二十四)CocosCreator 动画系统-动画编辑器实操-关键帧实现动态水印动画效果

上一篇&#xff0c;我们介绍了动画编辑器相关功能面板说明&#xff0c;感兴趣的朋友可以前往阅读&#xff1a; CocosCreator3.8研究笔记&#xff08;二十三&#xff09;CocosCreator 动画系统-动画编辑器相关功能面板说明。 熟悉了动画编辑器的基础操作&#xff0c;那么再使用动…

基于Javaweb的护肤品推荐系统 /基于ssm的护肤品销售系统

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&a…

八大排序(三)堆排序,计数排序,归并排序

一、堆排序 什么是堆排序&#xff1a;堆排序&#xff08;Heap Sort&#xff09;就是对直接选择排序的一种改进。此话怎讲呢&#xff1f;直接选择排序在待排序的n个数中进行n-1次比较选出最大或者最小的&#xff0c;但是在选出最大或者最小的数后&#xff0c;并没有对原来的序列…

毕业设计选题uniapp+springboot新闻资讯小程序源码 开题 lw 调试

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人七年开发经验&#xff0c;擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等&#xff0c;大家有这一块的问题可以一起交流&#xff01; &#x1f495;&…

基于 QT 实现一个 Ikun 专属桌面宠物

Step0、实现思路 想到的思路有两种&#xff1a; 1、使用 QT 的状态机模式&#xff0c;参考官网文档&#xff0c;这个模式的解耦最佳 2、使用原生 Wigets&#xff0c;将窗口设置为透明无框&#xff0c;循环播放桌面宠物的状态 本文采用第二种思路&#xff0c;实现一个极简版…

低功耗引擎Cliptrix为什么可以成为IOT的高效能工具

在万物互联的时代&#xff0c;现代人已普遍接受电视、音箱等电器设备具备智能化能力&#xff0c;也是在这个趋势下&#xff0c;我们身边越来越多的iOT设备联网和交互成为刚需。 但iot设备也面临到一些非常显著的痛点&#xff0c;例如iot设备的内存、处理器等核心元件无法与手机…

[Java·算法·困难]LeetCode124.二叉树中的最大路径和

每天一题&#xff0c;防止痴呆 题目示例分析思路1题解1 &#x1f449;️ 力扣原文 题目 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点&#xff0c;且不一定经…

对pyside6中的textedit进行自定义,实现按回车可以触发事件。

以下方法不算最优解。因为这个ui文件很容易重新编译&#xff0c;使写在ui.py里面的代码被删掉。 所以更好的方法应该是在主代码当中单独定义控件。并且使用布局添加控件到界面中。 以下内容纯为旧版实现&#xff0c;仅供参考&#xff1a; 我的实现方法是&#xff0c;先用qt de…

拒绝水文!八大排序(三)【适合初学者】快速排序

文章目录 快速排序递归实现霍尔法优化 挖坑法前后指针法 快速排序非递归 大家好&#xff0c;我是纪宁&#xff0c;这篇文章将向大家介绍非常有名气的一款排序&#xff1a;快速排序 回忆到我们刚开始学习C语言的时候。经常会使用到一个库函数&#xff1a; qsort函数 &#xff0…