7.6 做题笔记

推荐在 cnblogs 上阅读。

7.6 做题笔记

笔记、梳理、题解合三为一的产物。

P2569 [SCOI2010] 股票交易

考虑 DP,数据允许开到平方级别。

f i , j f_{i,j} fi,j 表示第 i i i 天持有 j j j 张股票的最大钱。

四种转移:

  1. 凭空买入,即本次买入与前面无关。 f i , j = − a p i ⋅ j f_{i,j}=-ap_i\cdot j fi,j=apij

  2. 不买不卖,直接从前些天转移。$f_{i,j}=\max{f_{i,j},f_{i-1,j}} $。

  3. 在前面交易(买或卖)基础上买入,需要满足“两次交易间隔 w w w 天”的条件。

    虽然不一定上一次交易就是第 i − w − 1 i-w-1 iw1 天,但是由转移 2 得, f i − w − 1 , k f_{i-w-1,k} fiw1,k 已经是前面这些天的最优答案,所以可以从这天转移到今天。

    注意买入的数量不要超过 a s i as_i asi。方程为: f i , j = max ⁡ { f i , j , f i − w − 1 , k − ( j − k ) ⋅ a p i } ( j − a s i ≤ k < j ) f_{i,j}=\max\{f_{i,j},f_{i-w-1,k}-(j-k)\cdot ap_i\}\; (j-as_i\leq k<j) fi,j=max{fi,j,fiw1,k(jk)api}(jasik<j)

  4. 与转移 3 类似,在前基础上卖出。方程为: f i , j = max ⁡ { f i , j , f i − w − 1 , k + ( k − j ) ⋅ b p i } ( j < k ≤ j + b s i ) f_{i,j}=\max\{f_{i,j},f_{i-w-1,k}+(k-j)\cdot bp_i\}\; (j<k\leq j+bs_i) fi,j=max{fi,j,fiw1,k+(kj)bpi}(j<kj+bsi)

发现转移 3,4 均为立方级别时间复杂度。 max ⁡ \max max 转移可以考虑单调队列优化。

根据乘法分配律,转移 3 方程实际为: f i , j = max ⁡ { f i , j , f i − w − 1 , k + k ⋅ a p i } − j ⋅ a p i f_{i,j}=\max\{f_{i,j},f_{i-w-1,k}+k\cdot ap_i\}-j\cdot ap_i fi,j=max{fi,j,fiw1,k+kapi}japi。转移 4 类似,就不写了。区间取最大值的操作,单调队列可完成。

转移时注意顺序与逆序,不要把已更新过的拿来更新其他状态。

#include<bits/stdc++.h>
using namespace std;#define int long longconst int N=2e3+5;int n,m,w;
int f[N][N];
int q[N],l,r;
int ap,bp,as,bs;signed main()
{scanf("%lld%lld%lld",&n,&m,&w);memset(f,~0x3f,sizeof f);for(int i=1;i<=n;i++){scanf("%lld%lld%lld%lld",&ap,&bp,&as,&bs);for(int j=0;j<=as;j++)f[i][j]=-ap*j;for(int j=0;j<=m;j++)f[i][j]=max(f[i][j],f[i-1][j]);if(i-w-1<0) continue;l=1,r=0;for(int j=0;j<=m;j++){while(l<=r&&q[l]<j-as)l++;while(l<=r&&f[i-w-1][q[r]]+q[r]*ap<=f[i-w-1][j]+j*ap)r--;q[++r]=j;if(l<=r)f[i][j]=max(f[i][j],f[i-w-1][q[l]]+q[l]*ap-j*ap);}l=1,r=0;for(int j=m;j>=0;j--){while(l<=r&&q[l]>j+bs)l++;while(l<=r&&f[i-w-1][q[r]]+q[r]*bp<=f[i-w-1][j]+j*bp)r--;q[++r]=j;if(l<=r)f[i][j]=max(f[i][j],f[i-w-1][q[l]]+q[l]*bp-j*bp);}}for(int j=1;j<=m;j++)f[n][j]=max(f[n][j-1],f[n][j]);printf("%lld\n",f[n][m]);return 0;
}

「一本通 5.5 例 2」最大连续和

时间只允许线性级别。设 f i f_i fi 为以 i i i 结尾的长度不超过 m m m 的子串的最大和。

朴素转移: f i = max ⁡ j { ∑ k = j i a k } ( j > i − m ) f_i=\max_j\{\sum\limits_{k=j}^i a_k\}\;(j>i-m) fi=maxj{k=jiak}(j>im)

预处理前缀和,则 f i = max ⁡ j { s u m i − s u m j − 1 } ( j > i − m ) f_i=\max_j\{sum_i-sum_{j-1}\}\;(j>i-m) fi=maxj{sumisumj1}(j>im)

s u m i sum_i sumi 提出来,再把 − s u m j − 1 -sum_{j-1} sumj1 去负号, max ⁡ \max max 也就变成了 min ⁡ \min min f i = s u m i − min ⁡ j { s u m j − 1 } f_i=sum_i-\min_j\{sum_{j-1}\} fi=sumiminj{sumj1}

可以用单调队列解决这个 min ⁡ \min min

#include<bits/stdc++.h>
using namespace std;#define int long longconst int N=3e5+5;int n,m;
int a[N],ans,sum[N];
int q[N],l,r;signed main()
{scanf("%lld%lld",&n,&m);ans=LLONG_MIN;for(int i=1;i<=n;i++)scanf("%lld",&a[i]),sum[i]=sum[i-1]+a[i];l=0,r=0;for(int i=1;i<=n;i++){while(l<=r&&q[l]<i-m)l++;ans=max(ans,sum[i]-sum[q[l]]);while(l<=r&&sum[q[r]]>=sum[i]) r--;q[++r]=i;}printf("%lld\n",ans);return 0;
}

P3089 [USACO13NOV] Pogo-Cow

时间允许平方级别。设 f i , j f_{i,j} fi,j 表示当前在 i i i 点,从 j j j 点跳来的最大得分。首先按坐标顺序排序。

立方转移: f i , j = max ⁡ { f j , k } + p i ( x j − x k ≤ x i − x j ) f_{i,j}=\max\{f_{j,k}\}+p_i\;(x_j-x_k\leq x_i-x_j) fi,j=max{fj,k}+pi(xjxkxixj)

这里有一个建立 DP 方程式的 trick:尝试一下把 f i − 1 , j f_{i-1,j} fi1,j 带入 f i , j f_{i,j} fi,j f i , j = f i − 1 , j − p i − 1 + p i f_{i,j}=f_{i-1,j}-p_{i-1}+p_i fi,j=fi1,jpi1+pi

注意这里 f i − 1 , j f_{i-1,j} fi1,j 的范围是 x j − x k ≤ x i − 1 − x j x_{j}-x_k\leq x_{i-1}-x_j xjxkxi1xj,但是由于 x i > x i − 1 x_i>x_{i-1} xi>xi1,所以满足 f i , j f_{i,j} fi,j 范围的 k k k 会比满足 f i − 1 , j f_{i-1,j} fi1,j 范围的 k k k 要多。这里简单用 while 拓展一下就好了。

题意是可以一直向左或一直向右,正反做两次 DP 即可。

#include<bits/stdc++.h>
using namespace std;#define int long long
#define pii pair<int,int>
#define x first
#define p secondconst int N=1e3+5;int n;
int f[N][N];
pii a[N];signed main()
{scanf("%lld",&n);for(int i=1;i<=n;i++)scanf("%lld%lld",&a[i].x,&a[i].p);sort(a+1,a+n+1);for(int j=1;j<=n;j++){f[j][j]=a[j].p;for(int i=j+1,k=j+1;i<=n;i++){f[i][j]=f[i-1][j]-a[i-1].p;while(k-1>=1&&a[j].x-a[k-1].x<=a[i].x-a[j].x)f[i][j]=max(f[i][j],f[j][--k]);f[i][j]+=a[i].p;}}for(int j=n;j>=1;j--){f[j][j]=a[j].p;for(int i=j-1,k=j-1;i>=1;i--){f[i][j]=f[i+1][j]-a[i+1].p;while(k+1<=n&&a[k+1].x-a[j].x<=a[j].x-a[i].x)f[i][j]=max(f[i][j],f[j][++k]);f[i][j]+=a[i].p;}}int ans=LLONG_MIN;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)ans=max(ans,f[i][j]);printf("%lld\n",ans);return 0;
}

P2627 [USACO11OPEN] Mowing the Lawn G

只允许线性复杂度。设 f i , 0 / 1 f_{i,0/1} fi,0/1 表示前 i i i 头奶牛中 不选/选 这头奶牛。 f i , 0 = max ⁡ { f i − 1 , 0 , f i − 1 , 1 } f_{i,0}=\max\{f_{i-1,0},f_{i-1,1}\} fi,0=max{fi1,0,fi1,1} f i , 1 = max ⁡ j { f j , 0 + ∑ k = j + 1 i E k } ( i − K ≤ j < i ) f_{i,1}=\max_j\{f_{j,0}+\sum\limits_{k=j+1}^iE_k\}\;(i-K\leq j< i) fi,1=maxj{fj,0+k=j+1iEk}(iKj<i)

预处理前缀和, f i , 1 = max ⁡ { f j , 0 + s u m i − s u m j } = max ⁡ { f j , 0 − s u m j } + s u m i f_{i,1}=\max\{f_{j,0}+sum_i-sum_{j}\}=\max\{f_{j,0}-sum_j\}+sum_i fi,1=max{fj,0+sumisumj}=max{fj,0sumj}+sumi。单调队列维护 max ⁡ \max max

#include<bits/stdc++.h>
using namespace std;#define int long longconst int N=1e5+5;int n,a[N],sum[N],f[N][2];
int q[N],l,r,k;signed main()
{scanf("%lld%lld",&n,&k);for(int i=1;i<=n;i++)scanf("%lld",&a[i]),sum[i]=sum[i-1]+a[i];l=1,r=1;for(int i=1;i<=n;i++){while(l<=r&&q[l]<i-k) l++;f[i][0]=max(f[i-1][0],f[i-1][1]);if(l<=r)f[i][1]=f[q[l]][0]-sum[q[l]]+sum[i];while(l<=r&&f[q[r]][0]-sum[q[r]]<f[i][0]-sum[i])r--;q[++r]=i;}int ans=LLONG_MIN;for(int i=1;i<=n;i++)ans=max({ans,f[i][0],f[i][1]});printf("%lld\n",ans);return 0;
}

P2564 [SCOI2009] 生日礼物

妙妙思路,不知道算不算 DP。

想象一个窗口,当窗口内的种类齐全时,就可以更新答案。窗口的右端点容易推进,直接循环就是了,考虑左端点。可以表示一种彩珠种类最新的位置。这里的最新指窗口右端点左边的最靠近右端点的彩珠。然后,当彩珠左端的位置不再是这个种类的最新位置时,即这个窗口里包含的种类除了它,还有一个也在窗口里,那么我们就可以舍弃掉它、推进左端点。

#include<bits/stdc++.h>
using namespace std;#define int long long
#define x first
#define col secondconst int N=1e6+5;int n,m;
pair<int,int> a[N];
int l,tot,k,X[N];signed main()
{scanf("%lld%lld",&n,&m);for(int i=1,t;i<=m;i++){scanf("%lld",&t);for(int j=1;j<=t;j++)scanf("%lld",&a[++k].x),a[k].col=i;}sort(a+1,a+n+1);memset(X,-1,sizeof X);l=1;int ans=LLONG_MAX;for(int i=1;i<=n;i++){if(X[a[i].col]==-1)++tot;X[a[i].col]=a[i].x;while(X[a[l].col]!=a[l].x&&l<=n)l++;if(tot==m)ans=min(ans,a[i].x-a[l].x);}printf("%lld\n",ans);return 0;
}

POJ 3017 Cut the Sequence

f i f_i fi 表示前 i i i 个已被分为若干段的最优答案。 f i = min ⁡ { f j + max ⁡ k = j + 1 i a k } ( j < i ∪ s u m i − s u m j ≤ m ) f_i=\min\{f_j+\max_{k=j+1}^i a_k\}\;(j<i\,\cup sum_i-sum_j\leq m) fi=min{fj+maxk=j+1iak}(j<isumisumjm)。上式可以把 max ⁡ \max max 提出来。

对于每个 i i i 有多个满足条件的 j j j,因为 f f f 单调不减,所以贡献嘴有答案的是最左边的满足条件的 j j j,记为 c i c_i ci。可以二分求得 c i c_i ci

max ⁡ \max max 可以用单调队列搞定。 f i = f c i + a q l f_i=f_{c_i}+a_{q_l} fi=fci+aql

#include<bits/stdc++.h>
using namespace std;#define int long longconst int N=1e5+5;int n,m,a[N],c[N],q[N],f[N],sum[N];signed main()
{scanf("%lld%lld",&n,&m);bool flg=1;for(int i=1;i<=n;i++)scanf("%lld",&a[i]),sum[i]=sum[i-1]+a[i];for(int i=1;i<=n;i++)if(a[i]>m) {flg=0;break;}if(!flg) return puts("-1"),0;for(int i=1;i<=n;i++){int l=0,r=i,mid,ans;while(l<=r){mid=l+r>>1;if(sum[i]-sum[mid]<=m)ans=mid,r=mid-1;else l=mid+1;}c[i]=ans;}int l=1,r=0;for(int i=1;i<=n;i++){while(l<=r&&a[q[r]]<=a[i])r--;q[++r]=i;while(l<=r&&q[l]<=c[i])l++;f[i]=f[c[i]]+a[q[l]];for(int j=l;j<=r;j++)f[i]=min(f[i],f[q[j]]+a[q[j+1]]);}printf("%lld\n",f[n]);return 0;
}

AcWing 298. 围栏

f i , j f_{i,j} fi,j 表示前 i i i 个工人刷了前 j j j 个木板的最大价值(可以有一些木板不被刷)。

显然,前一个人可以不刷,或者不刷前一块木板: f i , j = max ⁡ { f i − 1 , j , f i , j − 1 } f_{i,j}=\max\{f_{i-1,j},f_{i,j-1}\} fi,j=max{fi1,j,fi,j1}

朴素转移: f i , j = max ⁡ j − l i ≤ k < s i { f i − 1 , k + p i ⋅ ( j − k ) } ( j ≥ s i ) f_{i,j}=\max_{j-l_i\leq k<s_i}\{f_{i-1,k}+p_i\cdot(j-k)\}\;(j\geq s_i) fi,j=maxjlik<si{fi1,k+pi(jk)}(jsi)

把含 j j j 项提出来, max ⁡ \max max 里面就只剩有关 k k k 项。单调队列优化就搞定了。

实现的时候可以先把符合的 k k k 塞入单调队列中,然后进行转移求 f f f

#include<bits/stdc++.h>
using namespace std;#define int long longconst int N=1.6e4+5,M=105;int n,m;
struct node
{int l,p,s;bool operator<(const node &T)const{return s<T.s;}
}a[N];
int f[M][N];
int q[N],l,r;signed main()
{scanf("%lld%lld",&n,&m);for(int i=1;i<=m;i++)scanf("%lld%lld%lld",&a[i].l,&a[i].p,&a[i].s);sort(a+1,a+m+1);for(int i=1;i<=m;i++){l=1,r=0;for(int k=max(a[i].s-a[i].l,0ll);k<a[i].s;k++){while(l<=r&&f[i-1][q[r]]-a[i].p*q[r]<=f[i-1][k]-a[i].p*k)--r;q[++r]=k;}for(int j=1;j<=n;j++){f[i][j]=max(f[i-1][j],f[i][j-1]);if(j>=a[i].s){while(l<=r&&q[l]<j-a[i].l) ++l;if(l<=r)f[i][j]=max(f[i][j],a[i].p*j+f[i-1][q[l]]-a[i].p*q[l]);}}}printf("%lld\n",f[m][n]);return 0;
}

P2254 [NOI2005] 瑰丽华尔兹

f i , j f_{i,j} fi,j 为当前钢琴在 ( i , j ) (i,j) (i,j) 时已滑行的最大距离。

同一时间段内滑动具有唯一性,所以: f i , j = max ⁡ { f i − d x , j − d y + dis ( i , j , i − d x , j − d y ) } f_{i,j}=\max \{f_{i-dx,j-dy}+\text{dis}(i,j,i-dx,j-dy)\} fi,j=max{fidx,jdy+dis(i,j,idx,jdy)}。因为滑动只在同一行或列上,所以偏移量可以快速求得,自然想到单调队列优化 DP。

#include<bits/stdc++.h>
using namespace std;#define int long long
#define val first
#define pos secondconst int N=205;int n,m,sx,sy,K;
int f[N][N],fx[5][2]={0,0,-1,0,1,0,0,-1,0,1};
pair<int,int> q[N];
int l,r,len,ans;
char s[N][N];bool in(int x,int y)
{return x>=1&&x<=n&&y>=1&&y<=m;
}void work(int x,int y,int d)
{l=1,r=0;for(int i=1;in(x,y);i++,x+=fx[d][0],y+=fx[d][1])if(s[x][y]=='x')l=1,r=0;else{while(l<=r&&q[r].val+i-q[r].pos<f[x][y])r--;q[++r]={f[x][y],i};while(q[r].pos-q[l].pos>len) l++;f[x][y]=q[l].val+i-q[l].pos;ans=max(ans,f[x][y]);}
}signed main()
{scanf("%lld%lld%lld%lld%lld",&n,&m,&sx,&sy,&K);for(int i=1;i<=n;i++)scanf("%s",s[i]+1);memset(f,~0x3f,sizeof f);f[sx][sy]=0;for(int k=1,s,t,d;k<=K;k++){scanf("%lld%lld%lld",&s,&t,&d);len=t-s+1;if(d==1) for(int i=1;i<=m;i++) work(n,i,d);if(d==2) for(int i=1;i<=m;i++) work(1,i,d);if(d==3) for(int i=1;i<=n;i++) work(i,m,d);if(d==4) for(int i=1;i<=n;i++) work(i,1,d);}printf("%lld\n",ans);return 0;
}

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

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

相关文章

vite+vue3整合less教程

1、安装依赖 pnpm install -D less less-loader2、定义全局css变量文件 src/assets/css/global.less :root {--public_background_font_Color: red;--publicHouver_background_Color: #fff;--header_background_Color: #fff;--menu_background: #fff; }3、引入less src/main.…

官网首屏:激发你的小宇宙和第六感,为了漂亮,干就完了。

官网的首屏是指用户打开网站后首先看到的页面&#xff0c;通常是整个网站最重要的一部分。首屏的设计和内容对于吸引用户的注意力、传达品牌形象和价值、促使用户继续浏览和进行交互非常关键。以下是官网首屏的重要性的几个方面&#xff1a; 1. 第一印象&#xff1a; 首屏是用…

微信小程序毕业设计-医院挂号预约系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

用C#调用Windows API向指定窗口发送按键消息详解与示例

文章目录 1. 按键消息的定义及功能2. 引入所需的命名空间3. 定义Windows API函数4. 定义发送消息的方法5. 获取窗口句柄6. 调用API发送按键消息7. 使用示例注意事项总结 在C#中调用Windows API向指定窗口发送按键消息是一种常见的操作&#xff0c;这通常用于自动化脚本、游戏辅…

批量文本编辑管理神器:一键修改多处内容,轻松转换编码,助力工作效率飞跃提升!

在信息爆炸的时代&#xff0c;文本处理已成为我们日常工作中不可或缺的一部分。无论是处理文档、整理数据还是编辑资料&#xff0c;都需要对大量的文本进行管理和修改。然而&#xff0c;传统的文本编辑方式往往效率低下&#xff0c;容易出错&#xff0c;难以满足现代工作的高效…

[Day 26] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

數據科學與AI的整合應用 數據科學&#xff08;Data Science&#xff09;和人工智能&#xff08;AI&#xff09;在現代技術世界中扮演著至關重要的角色。兩者的整合應用能夠為企業和研究人員提供強大的工具&#xff0c;以更好地理解、預測和解決各種複雜的問題。本文將深入探討…

JimuReport 积木报表 v1.7.7 版本发布,一款免费的报表工具

项目介绍 一款免费的数据可视化报表工具&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于excel操作风格&#xff0c;通过拖拽完…

二刷算法训练营Day53 | 动态规划(14/17)

目录 详细布置&#xff1a; 1. 392. 判断子序列 2. 115. 不同的子序列 详细布置&#xff1a; 1. 392. 判断子序列 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余…

【昇思25天学习打卡营打卡指南-第十八天】基于MobileNetv2的垃圾分类

基于MobileNetv2的垃圾分类 MobileNetv2模型原理介绍 MobileNet网络是由Google团队于2017年提出的专注于移动端、嵌入式或IoT设备的轻量级CNN网络&#xff0c;相比于传统的卷积神经网络&#xff0c;MobileNet网络使用深度可分离卷积&#xff08;Depthwise Separable Convolut…

jQuery UI 主题

jQuery UI 主题 jQuery UI 是一个建立在 jQuery JavaScript 库之上的用户界面交互、特效、小部件和主题框架。它提供了一系列的预构建组件,如拖放、排序、折叠等,以及一个强大的主题系统,允许开发者轻松地自定义和控制用户界面的外观和感觉。 主题概述 jQuery UI 主题是一…

【手写数据库内核组件】01 解析树的结构,不同类型的数据结构组多层的链表树,抽象类型统一引用格式

不同类型的链表 ​专栏内容&#xff1a; postgresql使用入门基础手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 文章目录 不同类型…

Go语言--复合类型之map、结构体

map Go 语言中的 map(映射、字典)是一种内置的数据结构&#xff0c;它是一个无序的 key-value 对的集合&#xff0c;比如以身份证号作为唯一键来标识一个人的信息。 格式 map [keyType]valueType 在一个 map 里所有的键都是唯一的&#xff0c;而且必须是支持和!操作符的类型…

数据结构第3节: 抽象数据类型

第3节&#xff1a;基础概念 - 抽象数据类型&#xff08;ADT&#xff09; 抽象数据类型&#xff08;ADT&#xff09;是一种逻辑上的数学模型&#xff0c;以及定义在此数学模型上的一组操作。ADT通常隐藏了底层实现的细节&#xff0c;只暴露出一个可以被外界访问和操作的接口。在…

mysql使用group_concat拼接

关键字说明 GROUP_CONCAT 是一个在关系型数据库中常见的函数&#xff0c;用于将查询结果中的多行数据合并成一行&#xff0c;并以特定的分隔符分隔每个值。它通常与 GROUP BY 结合使用&#xff0c;用于聚合数据并将每个组内的值连接起来 示例说明 假设有一个表 students 包含…

pytorch、pytorch_lightning、torchmetrics版本对应

目录 1.pytorch_lightning对应版本安装 2.PyTorch Lightning介绍 PyTorch Lightning 的作用&#xff1a; PyTorch Lightning 的基本用法&#xff1a; 报错&#xff1a;ModuleNotFoundError: No module named pytorch_lightning 这种报错一看就是缺了pytorch_lightning包&am…

2021RoboCom世界机器人开发者大赛-本科组(初赛)

1、懂的都懂 由于本题数据范围很小&#xff0c;所以直接四层for循环枚举预处理所有可能的四个数的和&#xff0c;然后对于新图中每个数的四倍&#xff0c;判断是否出现过即可 C代码&#xff1a; #include<iostream> using namespace std; const int N55; int a[N]; bo…

Linux防火墙使用(firewalld与iptables)

防火墙概述 防火墙是一种由硬件和软件组合而成&#xff0c;在内部网和外部网之间、专有网和公共网之间构造的保护屏障&#xff0c;用以保护用户资料和信息安全的一种技术 防火墙作用在于及时发现并处理计算机网络运行时可能存在的安全风险、数据传输等问题&#xff0c;从而实现…

VUE3初学入门-02-VUE创建项目

创建VUE项目的另一个方法 三种方法通过vue-cli进行创建通过npm进行创建比较 部署到nginx修改配置生成部署文件 三种方法 上一篇是在VSCODE中建立工作区&#xff0c;然后创建&#xff0c;属于命令加鼠标方式。个人感觉&#xff0c;在VSCODE基本上都是这样的操作&#xff0c;不是…

Superset超火的企业级可视化BI分析工具

Superset&#xff0c;听起来就像是超级集合&#xff0c;确实&#xff0c;它几乎集合了所有你需要的数据功能。简单说&#xff0c;它就是一个现代化、功能强大的数据可视化工具。 它支持各种数据库&#xff0c;有着丰富的可视化选项&#xff0c;可以用来创建漂亮的数据仪表盘&a…

【PYG】GNN和全连接层(FC)分别在不同的类中,使用反向传播联合训练,实现端到端的训练过程

文章目录 基本步骤GNN和全连接层&#xff08;FC&#xff09;联合训练1. 定义GNN模型类2. 定义FC模型类3. 训练循环中的联合优化解释完整代码 GNN和全连接层&#xff08;FC&#xff09;分别使用不同的优化器和学习率分别进行参数更新解释 基本步骤 要从GNN&#xff08;图神经网…