背包问题

目录

开端

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.xdnf.cn/news/148360.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

3种等待方式,让你学会Selenium设置自动化等待测试脚本!

一、Selenium脚本为什么要设置等待方式&#xff1f;——即他的应用背景到底是什么 应用Selenium时&#xff0c;浏览器加载过程中无法立即显示对应的页面元素从而无法进行元素操作&#xff0c;需设置一定的等待时间去等待元素的出现。&#xff08;简单来说&#xff0c;就是设置…

Unity实现设计模式——状态模式

Unity实现设计模式——状态模式 状态模式最核心的设计思路就是将对象的状态抽象出一个接口&#xff0c;然后根据它的不同状态封装其行为&#xff0c;这样就可以实现状态和行为的绑定&#xff0c;最终实现对象和状态的有效解耦。 在实际开发中一般用到FSM有限状态机的实现&…

python二次开发CATIA:文字轮廓草图

CATIA V5 版本的草图中&#xff0c;并没有文字轮廓的创建命令。通常的做法是&#xff0c;再Drawing 文件中创建所需文本-->将 Drawing 文件另存为 dwg / dxf 格式-->打开另存的文件&#xff0c;文字已转为轮廓线条-->复制线条并粘贴到草图中。 本例中&#xff0c;基于…

day49数据库 索引 事务

一、索引 什么是索引&#xff1a;索引是数据库库中用来提高查询效率的技术&#xff0c;类似于目录 为什么要使用索引&#xff1a;如果不使用索引&#xff0c;数据会零散的保存在磁盘块中&#xff0c;查询数据需要遍历每一个磁盘块&#xff0c;直到找到数据为止&#xff0c;效率…

Python学习笔记之分支结构与循环结构

Python学习笔记之分支结构与循环结构 一、分支结构 使用关键字if、elif、else 练习1&#xff1a;使用分支结构实现分段函数求值 """分段函数求值""" x float(input("x "))if x > 1:y 3 * x - 5 elif x < -1:y 5 * x 3…

【数仓精品理论分析】能不能学大数据?

【数仓精品理论分析】能不能学大数据&#xff1f; 还能不能学大数据datapulse官网&#xff1a; 自身情况数据行业发展情况 还能不能学大数据 首先看到这个话题的时候&#xff0c;我是这样想的&#xff0c;能不能学大数据需要参考本人的自身情况【学历、年龄、决心、有没有矿或者…

12、Kubernetes中KubeProxy实现之iptables和ipvs

目录 一、概述 二、iptables 代理模式 三、iptables案例分析 四、ipvs案例分析 一、概述 iptables和ipvs其实都是依赖的一个共同的Linux内核模块&#xff1a;Netfilter。Netfilter是Linux 2.4.x引入的一个子系统&#xff0c;它作为一个通用的、抽象的框架&#xff0c;提供…

手机自动直播系统源码交付与代理加盟注意事项解析!

随着直播行业的不断发展&#xff0c;手机自动直播已经成为了人们生活中不可或缺的一部分。手机无人直播软件成了香饽饽&#xff0c;各类手机实景直播APP大批量涌现。因为创业和技术门槛低&#xff0c;市场需求高&#xff0c;所以成了最火热创业赛道。那么如果是不懂技术的人群&…

由Long类型引发的生产事故

事情原由 今天测试忽然在群里发了一个看似非常简单的线上问题&#xff0c;具体是&#xff1a;在后台通过订单编号(orderId)修改订单信息时&#xff0c;修改不成功 &#xff0c;修改前后的订单数据完全没有发生变化。第一眼看到这个问题的时候&#xff0c;我心想后台实现逻辑并不…

CSS 语法

CSS 实例 CSS 规则由两个主要的部分构成&#xff1a;选择器&#xff0c;以及一条或多条声明: 选择器通常是您需要改变样式的 HTML 元素。 每条声明由一个属性和一个值组成。 属性&#xff08;property&#xff09;是您希望设置的样式属性&#xff08;style attribute&#x…

IDEA 配置 Maven(解决依赖下载缓慢)

IDEA 配置 Maven&#xff08;解决依赖下载缓慢&#xff09; 这一篇主要介绍 Maven 的基本用法。等我之后学习到框架知识时&#xff0c;会完善此部分内容。 一、Maven 简介 Maven 是专门用于管理和构建 Java 项目的工具&#xff0c;Apache Maven 是一个项目管理和构建工具&#…

lenovo联想台式机 拯救者 刃7000-28ICBR(90KX)原装出厂Windows10系统镜像

LENOVO联想拯救者(90KX)原厂WIN10系统 下载链接&#xff1a;https://pan.baidu.com/s/1beocPJSmnFbY4Y_ZQM2djA?pwd4d1n 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xff1a;ISO 文件大…

QT、C++实现地图导航系统(mapSystem)

文章目录 地图导航系统项目应用背景技术栈选择数据处理算法实现界面实现源码展示成果展示源码下载 &#xff08;免费&#xff09; 地图导航系统 项目应用背景 电子地图导航系统的主要目的是为用户提供精确、实时的导航和位置信息&#xff0c;以帮助他们在城市或地区内轻松找到…

Golang 中的调试技巧

掌握有效的策略和工具&#xff0c;实现顺畅的开发 调试是每位开发人员都必须掌握的关键技能。它是识别、隔离和解决代码库中问题的过程。在 Golang 的世界中&#xff0c;掌握有效的调试技巧可以显著提升您的开发工作流程&#xff0c;并帮助您创建更可靠和健壮的应用程序。在本…

【面试经典150 | 矩阵】矩阵置零

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a; O ( m n ) O(mn) O(mn) 空间复杂度方法二&#xff1a; O ( m n ) O(mn) O(mn) 空间复杂度方法三&#xff1a;仅使用2个额外变量的常量空间复杂度 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算…

【Docker】Docker的应用包含Sandbox、PaaS、Open Solution以及IT运维概念的详细讲解

前言 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 &#x1f4d5;作者简介&#xff1a;热…

简单的考试系统

开发一个简单的考试系统&#xff0c;在HTML页面中建立一个表单&#xff0c;通过post方法传递参数。题目类型包括单选题、多选题和填空题&#xff0c;要求程序给出考试成绩。 <!DOCTYPE html> <html> <head><title>question.html</title><met…

C#餐饮收银系统

一、引言 餐饮收银系统是一种用于管理餐馆、咖啡厅、快餐店等餐饮业务的计算机化工具。它旨在简化点餐、结账、库存管理等任务&#xff0c;提高运营效率&#xff0c;增强客户体验&#xff0c;同时提供准确的财务记录。C# 餐饮收银系统是一种使用C#编程语言开发的餐饮业务管理软…

SG Former论文学习笔记

超越SWin和CSWin Transformer的新模型 代码地址&#xff1a;https://github.com/OliverRensu/SG-Former 论文地址&#xff1a;https://arxiv.org/pdf/2308.12216.pdf ViT在各种视觉任务中虽然成功&#xff0c;但它的计算成本随着Token序列长度的增加呈二次增长&#xff0c;这在…

Gurobi设置初始可行解

目录 1. 决策变量的Start属性直接设置变量的初始值 1.1 Start&#xff1a;MIP变量的起始值&#xff08;初值&#xff09;double类型&#xff0c;可更改 1.2 StartNodeLimit&#xff1a;限制了在完善一组输入部分变量的初始解时&#xff0c;MIP所探索的分支定界的节点的数量 …