【算法基础】动态规划

背包问题

01背包

每个物品只能放一次

2. 01背包问题 - AcWing题库

二维dp

#include<bits/stdc++.h>
const int N=1010;
int f[N][N];
int v[N],w[N]; 
signed main()
{int n,m;std::cin>>n>>m; for(int i=1;i<=n;i++) std::cin>>v[i]>>w[i];for(int i=1;i<=n;i++){for(int j=0;j<=m;j++){f[i][j]=f[i-1][j];if(j>=v[i]) f[i][j]=std::max(f[i][j],f[i-1][j-v[i]]+w[i]);	} }	std::cout<<f[n][m];return 0;
}

一维dp

观察上面的循环内的式子,发现推导出f[i][j]只需要f[i-1][j]和f[i-1][j-v[i]]就好,也就是当前的f[i]是由上一层f[i-1]推导而来,因此我们用到滚动数组来对二维dp进行优化。

滚动数组是一种优化算法技巧,常用于动态规划问题中,用来减少空间复杂度。在动态规划问题中,我们通常需要使用一个数组来存储中间计算的结果,以供后续计算使用。而滚动数组通过利用数组中的部分空间,不断覆盖原来的值,从而减少所使用的空间。

具体来说,滚动数组通常用一个较小的大小来表示原数组,这个较小的大小是经过推导和分析所确定的。在计算过程中,我们只需要维护这个较小的数组,当需要用到原数组中的值时,通过计算得到。

这种技巧能够在一定程度上减少使用的空间复杂度,特别是针对一些状态转移方程只与之前的一部分状态有关的情况。滚动数组在动态规划问题中被广泛应用,能够提高算法的效率。

同时, 原循环中f[i][j]=std::max(f[i][j],f[i-1][j-v[i]]+w[i]);,如果j是正序即从v[i]-m,那么这里的f[j-v[i]]就是f[i][j-v[i]],因为在循环中正序从小到大会覆盖掉之前的f[i-1],故而采取逆序。滚动数组(简单说明)_滚动数组思想-CSDN博客    

#include<bits/stdc++.h>
const int N=1010;
int f[N];
int v[N],w[N]; 
signed main()
{int n,m;std::cin>>n>>m; for(int i=1;i<=n;i++) std::cin>>v[i]>>w[i];for(int i=1;i<=n;i++){for(int j=m;j>=v[i];j--){f[j]=std::max(f[j],f[j-v[i]]+w[i]);	} }	std::cout<<f[m];return 0;
}

完全背包

物品有无限件

3. 完全背包问题 - AcWing题库

三重循环

额外加一层循环来枚举选择当前项的个数,这样会超时

#include<bits/stdc++.h>
const int N=1010;
int f[N][N];
int v[N],w[N]; 
signed main()
{int n,m;std::cin>>n>>m; for(int i=1;i<=n;i++) std::cin>>v[i]>>w[i];for(int i=1;i<=n;i++){for(int j=0;j<=m;j++){for(int k=0;k*v[i]<=j;k++){f[i][j]=std::max(f[i][j],f[i-1][j-k*v[i]]+k*w[i]);}}}	std::cout<<f[n][m];return 0;
}

 二重循环

与01背包不同的是max里面是f[i][j-v[i]]+w[i],01背包中这里是 f[i-1][j-v[i]]+w[i]

因此下面优化成一维时对j的枚举按升序就好。

#include<bits/stdc++.h>
const int N=1010;
int f[N][N];
int v[N],w[N]; 
signed main()
{int n,m;std::cin>>n>>m; for(int i=1;i<=n;i++) std::cin>>v[i]>>w[i];for(int i=1;i<=n;i++){for(int j=0;j<=m;j++){f[i][j]=f[i-1][j];if(j>=v[i]) f[i][j]=std::max(f[i][j],f[i][j-v[i]]+w[i]);}}	std::cout<<f[n][m];return 0;
}

一维循环 

#include<bits/stdc++.h>
const int N=1010;
int f[N];
int v[N],w[N]; 
signed main()
{int n,m;std::cin>>n>>m; for(int i=1;i<=n;i++) std::cin>>v[i]>>w[i];for(int i=1;i<=n;i++){for(int j=v[i];j<=m;j++){f[j]=std::max(f[j],f[j-v[i]]+w[i]);}}	std::cout<<f[m];return 0;
}

多重背包问题 

物品只有s[i]件

4. 多重背包问题 I - AcWing题库

 三重循环

#include<bits/stdc++.h>
const int N=1e3+10;
int v[N],w[N],s[N];
int num,val;
int f[N][N];//从前i件中选,剩余容量为 signed main()
{std::cin>>num>>val;	for(int i=1;i<=num;i++) std::cin>>v[i]>>w[i]>>s[i];for(int i=1;i<=num;i++)//枚举物品 {for(int j=0;j<=val;j++){for(int k=0;k*v[i]<=j&&k<=s[i];k++){f[i][j]=std::max(f[i][j],f[i-1][j-k*v[i]]+k*w[i]);}} }std::cout<<f[num][val];return 0;
}

二进制优化 

 5. 多重背包问题 II - AcWing题库

#include<bits/stdc++.h>
const int N = 12010, M = 2010;
int v[N], w[N];
int f[M];
int num,val,cnt;
signed main()
{std::cin>>num>>val;for(int i=1;i<=num;i++){int a,b,s;std::cin>>a>>b>>s;int k=1;while(s>=k){cnt++;v[cnt]=a*k;w[cnt]=b*k;s-=k;k*=2;	}	if(s) {cnt++;v[cnt]=a*s;w[cnt]=b*s;}}for(int i=1;i<=cnt;i++)	{for(int j=val;j>=v[i];j--){f[j]=std::max(f[j],f[j-v[i]]+w[i]);		}}std::cout<<f[val];return 0;
}

分组背包问题

9. 分组背包问题 - AcWing题库

每组物品有若干个,同一组内的物品最多只能选一个。

二维dp

#include<bits/stdc++.h>
const int N=110;int s[N],w[N][N],v[N][N],f[N][N];
int num,val;
signed main()
{std::cin>>num>>val;//组数 for(int i=1;i<=num;i++){std::cin>>s[i];for(int j=1;j<=s[i];j++){std::cin>>v[i][j]>>w[i][j];}}for(int i=1;i<=num;i++){for(int j=0;j<=val;j++){f[i][j]=f[i-1][j];for(int k=0;k<=s[i];k++){if(j>=v[i][k]) f[i][j]=std::max(f[i][j],f[i-1][j-v[i][k]]+w[i][k]);}} }std::cout<<f[num][val];return 0;
}

 一维dp

#include<bits/stdc++.h>
const int N=110;int s[N],w[N][N],v[N][N],f[N];
int num,val;
signed main()
{std::cin>>num>>val;//组数 for(int i=1;i<=num;i++){std::cin>>s[i];for(int j=1;j<=s[i];j++){std::cin>>v[i][j]>>w[i][j];}}for(int i=1;i<=num;i++){for(int j=val;j>=0;j--){for(int k=1;k<=s[i];k++){if(j>=v[i][k]) f[j]=std::max(f[j],f[j-v[i][k]]+w[i][k]);}} }std::cout<<f[val];return 0;
}

线性DP 

数字三角形

898. 数字三角形 - AcWing题库

#include<bits/stdc++.h>
const int N=510;
int f[N][N],a[N][N];signed main()
{int n;std::cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<=i;j++) std::cin>>a[i][j];}for(int i=n;i>=1;i--){for(int j=1;j<=i;j++){f[i][j]=std::max(f[i+1][j],f[i+1][j+1])+a[i][j];}}std::cout<<f[1][1];return 0;
}

最长上升子序列

双重循环

895. 最长上升子序列 - AcWing题库

#include<bits/stdc++.h>
const int N=1e3+10;
int a[N],f[N];signed main()
{int n;std::cin>>n;for(int i=1;i<=n;i++) std::cin>>a[i];for(int i=1;i<=n;i++){f[i]=1;for(int j=1;j<i;j++){if(a[j]<a[i]) f[i]=std::max(f[i],f[j]+1);	}	}int res=-1e9;for(int i=1;i<=n;i++) res=std::max(res,f[i]);std::cout<<res;return 0; 
}

 优化

#include<bits/stdc++.h>
const int N=1e3+10;
int a[N],q[N];
int n,cnt;
signed main()
{std::cin>>n;for(int i=1;i<=n;i++) std::cin>>a[i];for(int i=1;i<=n;i++){if(a[i]>q[cnt]||!cnt) q[++cnt]=a[i];//q从1开始 else{int l=1,r=cnt,res=-1;while(l<=r){int mid=l+r>>1;if(q[mid]>=a[i]) {res=mid;r=mid-1;}else l=mid+1;}  q[res]=a[i];} }std::cout<<cnt;return 0; 
}

最长公共子序列

897. 最长公共子序列 - AcWing题库

#include<bits/stdc++.h>
const int N=1e3+10;
char a[N],b[N];
int n,m;
int f[N][N];
signed main()
{std::cin>>n>>m;std::cin>>a+1>>b+1;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){f[i][j]=std::max(f[i-1][j],f[i][j-1]);if(a[i]==b[j]) f[i][j]=std::max(f[i][j],f[i-1][j-1]+1);}}std::cout<<f[n][m];return 0;
}

最短编辑距离

902. 最短编辑距离 - AcWing题库

#include<bits/stdc++.h>
const int N=1e3+10;
char a[N],b[N];
int n,m;
int f[N][N];
signed main()
{std::cin>>n>>a+1>>m>>b+1;for(int i=0;i<=n;i++) f[i][0]=i;for(int j=0;j<=m;j++) f[0][j]=j;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){f[i][j]=std::min(f[i-1][j],f[i][j-1])+1;//增,删的情况if(a[i]==b[j]) f[i][j]=std::min(f[i][j],f[i-1][j-1]);else f[i][j]=std::min(f[i][j],f[i-1][j-1]+1);//判断是否需要改}}std::cout<<f[n][m];return 0;
}

编辑距离

899. 编辑距离 - AcWing题库

给定n个字符串,m次询问每次给一个字符串和限制,问每次询问中n个字符串中每次有多少个可以在操作限制内改为给的字符

这里发现f数组中,前面是枚举给定字符串还是要修改的字符串不会影响答案。 

#include<bits/stdc++.h>
const int N=1e3+10;
int n,m;
char s[N][15];
int f[N][N];
/*
int dis(char a[],char s[])//把s变成a 
{int la=strlen(a+1),ls=strlen(s+1);for(int i=0;i<=la;i++) f[i][0]=i;for(int i=0;i<=ls;i++) f[0][i]=i;for(int i=1;i<=la;i++){for(int j=1;j<=ls;j++){f[i][j]=std::min(std::min(f[i-1][j]+1,f[i][j-1]+1),f[i-1][j-1]+!(a[i]==s[j]));		}} return f[la][ls];
}*/
int dis(char a[],char s[])//把s变成a 
{int la=strlen(a+1),ls=strlen(s+1);for(int i=0;i<=ls;i++) f[i][0]=i;for(int i=0;i<=la;i++) f[0][i]=i;for(int i=1;i<=ls;i++){for(int j=1;j<=la;j++){f[i][j]=std::min(std::min(f[i-1][j]+1,f[i][j-1]+1),f[i-1][j-1]+!(s[i]==a[j]));		}} return f[ls][la];
}
signed main()
{std::cin>>n>>m;for(int i=0;i<n;i++) std::cin>>s[i]+1;//给定的字符串while(m--){char a[N];int limit;std::cin>>a+1>>limit;int res=0;for(int i=0;i<n;i++)//枚举有几个字符串可以变成询问的 {if(dis(a,s[i])<=limit) res++;}	std::cout<<res<<'\n';} return 0;
} 

区间DP

石子合并

282. 石子合并 - AcWing题库

#include<bits/stdc++.h>
const int N=310;
int n;
int a[N],s[N],f[N][N];
signed main()
{std::cin>>n;for(int i=1;i<=n;i++){std::cin>>a[i];s[i]=s[i-1]+a[i];}for(int len=2;len<=n;len++){for(int i=1;i+len-1<=n;i++){int j=i+len-1;//右端点f[i][j]=1e9;for(int k=i;k<=j;k++){f[i][j]=std::min(f[i][j],f[i][k]+f[k+1][j]+s[j]-s[i-1]);	} }}std::cout<<f[1][n];return 0;
} 

计数类DP

整数划分 

900. 整数划分 - AcWing题库

 完全背包
朴素版
#include<bits/stdc++.h>
const int N=1e3+10,mod=1e9+7;
int f[N][N];//f[i][j]表示只从1~i中选,且总和等于j的方案数
signed main()
{int n;std::cin>>n;f[0][0]=1;for(int i=1;i<=n;i++){for(int j=0;j<=n;j++){f[i][j]=f[i-1][j];if(j>=i) f[i][j]=(f[i-1][j]+f[i][j-i])%mod;}}std::cout<<f[n][n]%mod;return 0;
} 
优化版
#include<bits/stdc++.h>
const int N=1e3+10,mod=1e9+7;
int f[N];//f[i][j]表示只从1~i中选,且总和等于j的方案数
signed main()
{int n;std::cin>>n;f[0]=1;for(int i=1;i<=n;i++){for(int j=i;j<=n;j++){f[j]=(f[j]+f[j-i])%mod;}}std::cout<<f[n];return 0;
}

数位统计DP

计数问题

338. 计数问题 - AcWing题库

#include<bits/stdc++.h>
int get(std::vector<int> nums,int l,int r)
{int res=0;for(int i=r;i>=l;i--){res=res*10+nums[i];}return res;
}
int count(int n,int x)//1-n中,x出现次数 
{if(!n) return 0; std::vector<int> nums;//倒着存数while(n){nums.push_back(n%10);n/=10;}//346,643n=nums.size();int res=0;//如果x为0,x不能出现在首位,故而从n-2开始 for(int i=n-1-!x;i>=0;i--) //枚举x出现在每位的次数 {if(i<n-1)//如果当前位不是最高位,计算前面的可能个数 {res+=get(nums,i+1,n-1)*pow(10,i); //get从低位到高位if(!x) res-=pow(10,i);//如果x为0,前面必须从001开始,因此少一种情况 } if(nums[i]==x) res+=get(nums,0,i-1)+1; //计算后面的可能 else if(nums[i]>x) res+=pow(10,i);} return res;
}
signed main()
{int a,b;while(std::cin>>a>>b,a){if(a>b) std::swap(a,b);for(int i=0;i<10;i++){std::cout<<count(b,i)-count(a-1,i)<<' ';}std::cout<<'\n';}return 0;
} 

状态压缩DP

蒙德里安的梦想 

291. 蒙德里安的梦想 - AcWing题库

#include<bits/stdc++.h>
const int N=1<<12;//每一列的状态数
bool st[N];//记录合法的列的状态 
#define int long long
std::vector<int> can[N];
int f[12][N];//前i-1列已经填好,且从第i-1列伸到第i列的状态是j 
signed main()
{int n,m;	while(std::cin>>n>>m,n||m){//先预处理出第i-1列的所有合法状态//先判断是否合法 for(int i=0;i<1<<n;i++)//每一列有n个格子,枚举状态 {int cnt=0;bool ok=true;for(int j=0;j<n;j++) {if((i>>j)&1)//当前位填了 {if(cnt%2)//空格数是奇数 {ok=false;break;} cnt=0; //归0 }else{cnt++;}}if(cnt%2) ok=false;st[i]=ok;} memset(can,0,sizeof can);//预处理出所有第i列前一列的可能状态for(int i=0;i<1<<n;i++)//枚举这一列的状态 {for(int j=0;j<1<<n;j++)//前一列的状态 {if((i&j)==0&&st[i|j]) //没有冲突且空格数为偶数 {can[i].push_back(j);	} } } memset(f,0,sizeof f);f[0][0]=1;for(int i=1;i<=m;i++)//枚举每一列 {for(int j=0;j<1<<n;j++)//这一列的状态 {for(auto k:can[j]){f[i][j]+=f[i-1][k]; } }} std::cout<<f[m][0]<<'\n';}return 0;
} 

 最短Hamilton路径

91. 最短Hamilton路径 - AcWing题库

#include<bits/stdc++.h>
const int N=1<<20;
int w[25][25],f[N][25];signed main()
{int n;std::cin>>n;for(int i=0;i<n;i++){for(int j=0;j<n;j++){std::cin>>w[i][j];}}memset(f,0x3f,sizeof f);f[1][0]=0;for(int i=0;i<1<<n;i++){for(int j=0;j<n;j++){if((i>>j)&1){for(int k=0;k<n;k++){if((i>>k)&1) f[i][j]=std::min(f[i][j],f[i-(1<<j)][k]+w[k][j]);}}}}std::cout<<f[(1<<n)-1][n-1];return 0;
}

树形DP

没有上司的舞会

285. 没有上司的舞会 - AcWing题库

#include<bits/stdc++.h>
const int N=6010;int f[N][2],happy[N];
bool hasfa[N];
int h[N],ne[N],e[N],idx;
void add(int a,int b)
{e[idx]=a,ne[idx]=h[b],h[b]=idx++;
}
void dfs(int u)
{f[u][1]=happy[u];for(int i=h[u];i!=-1;i=ne[i]){int j=e[i];dfs(j);f[u][1]+=f[j][0];f[u][0]+=std::max(f[j][0],f[j][1]); }}
signed main()
{int n;std::cin>>n;for(int i=1;i<=n;i++) std::cin>>happy[i];memset(h,-1,sizeof h);for(int i=1;i<n;i++){int a,b;//b是上司std::cin>>a>>b;add(a,b);hasfa[a]=true;	 } int root=1;while(hasfa[root]) root++;dfs(root);std::cout<<std::max(f[root][0],f[root][1]);return 0;
}

 记忆化搜索

滑雪

901. 滑雪 - AcWing题库

#include<bits/stdc++.h>
const int N=310;
int h[N][N],mem[N][N];
int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
int n,m;
int dfs(int x,int y)
{int &u=mem[x][y];if(u!=-1) return mem[x][y];u=1;//至少可以走当前点 for(int i=0;i<4;i++){int a=x+dx[i],b=y+dy[i];if(a>=1&&b>=1&&a<=n&&b<=m&&h[a][b]<h[x][y])u=std::max(u,dfs(a,b)+1);}return u;
}
signed main()
{std::cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++) std::cin>>h[i][j]; }memset(mem,-1,sizeof mem);int res=0;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){res=std::max(res,dfs(i,j));}}std::cout<<res; return 0;
}

完结,撒花~

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

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

相关文章

Nginx的核心配置文件

Nginx的核心配置文件 学习Nginx首先需要对它的核心配置文件有一定的认识&#xff0c;这个文件位于Nginx的安装目录/usr/local/nginx/conf目录下&#xff0c;名字为nginx.conf 详细配置&#xff0c;可以参考resources目录下的<<nginx配置中文详解.conf>> Nginx的核…

warning C4251

c - Warning C4251 when building a DLL that exports a class containing an ATL::CString member - Stack Overflow

python中sklearn库在数据预处理中的详细用法,及5个常用的Scikit-learn(通常简称为 sklearn)程序代码示例

文章目录 前言1. 数据清洗&#xff1a;使用 sklearn.preprocessing 中的 StandardScaler 和 MinMaxScaler 进行数据规范化。2. 缺失值处理&#xff1a;使用 sklearn.impute 中的 SimpleImputer 来填充缺失值。3. 数据编码&#xff1a;使用 sklearn.preprocessing 中的 OneHotEn…

Nosql之redis概述及基本操作

关系数据库与非关系型数据库概述 关系型数据库 关系型数据库是一个结构化的数据库&#xff0c;创建在关系模型&#xff08;二维表格模型&#xff09;基础上&#xff0c;一般面向于记录。SQL语句(标准数据查询语言)就是一种基于关系型数据库的语言&#xff0c;用于执行对关系型…

常见负载均衡算法/策略(概念)

目录 1.1. 轮循均衡&#xff08;Round Robin&#xff09; 1.2. 权重轮循均衡&#xff08;Weighted Round Robin&#xff09; 1.3. 随机均衡&#xff08;Random&#xff09; 1.4. 权重随机均衡&#xff08;Weighted Random&#xff09; 1.5. 响应速度均衡&#xff08;R…

聊一聊go的单元测试(goconvey、gomonkey、gomock)

文章目录 概要一、测试框架1.1、testing1.2、stretchr/testify1.3、smartystreets/goconvey1.4、cweill/gotests 二、打桩和mock2.1、打桩2.2、mock2.2.1、mockgen2.2.1、示例 三、基准测试和模糊测试3.1、基准测试3.2、模糊测试 四、总结4.1、小结4.2、其他4.3、参考资料 概要…

六.Linux远程登录

1.说明&#xff1a;公司开发的时候&#xff0c;具体的应用场景是这样的 1.linux服务器是开发小组共享 2.正式上线的项目是运行在公网 3.因此程序员需要远程登录到Linux进行项目管理或者开发 4.画出简单的网络拓扑示意图(帮助理解) 5.远程登录客户端有Xshell6、Xftp6&#xff0…

7年经验之谈 —— 如何高效的开展app的性能测试?

APP性能测试是什么 从网上查了一下&#xff0c;貌似也没什么特别的定义&#xff0c;我这边根据自己的经验给出一个自己的定义&#xff0c;如有巧合纯属雷同。 客户端性能测试就是&#xff0c;从业务和用户的角度出发&#xff0c;设计合理且有效的性能测试场景&#xff0c;制定…

3D建模基础教程:石墨工具介绍

3DMAX的石墨&#xff08;Graphite&#xff09;工具是一个强大的建模工具&#xff0c;可以用来创建和编辑复杂的3D模型。下面是对石墨工具的详细介绍&#xff1a; 石墨工具的界面布局&#xff1a; 石墨工具的界面与3DMAX的主界面相同&#xff0c;包括菜单栏、工具栏、视图区、…

【LeetCode】二叉树OJ

目录 一、根据二叉树创建字符串 二、二叉树的层序遍历 三、二叉树的层序遍历 II 四、二叉树的最近公共祖先 五、二叉搜索树与双向链表 六、从前序与中序遍历序列构造二叉树 七、从中序与后序遍历序列构造二叉树 一、根据二叉树创建字符串 606. 根据二叉树创建字符串 - …

redis运维(八)数据类型(一)字符串

一 字符串 说明&#xff1a; 不需要精通,但是得有一个粗略的认识,然后利用help command查看具体使用仅做记录查询 ① 基础概念 说明&#xff1a; ex是用来收敛内存使用率备注&#xff1a; 早期set是不带ex的默认&#xff1a; 不设置ex,是常驻内存 key和value的命名规范 …

Java-类和类的关系

代码 总结&#xff1a; 【1】面向对象的思维&#xff1a;找参与者&#xff0c;找女孩类&#xff0c;找男孩类 【2】体会了什么叫方法的形参&#xff0c;什么叫方法的实参&#xff1a; 具体传入的内容 实参&#xff1a; 【3】类和类可以产生关系&#xff1a; &#xff08;1…

基于非洲秃鹫算法优化概率神经网络PNN的分类预测 - 附代码

基于非洲秃鹫算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于非洲秃鹫算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于非洲秃鹫优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

电容的耐压值是什么意思呢?

电容是什么&#xff1f; 电容是一种能以电荷的形式储存能量的装置。与同样大小的电池相比&#xff0c;电容能储存的能量要小得多&#xff0c;大约1w个电容存储的能量才顶一节电池存储的能量&#xff0c;但对于许多电路设计来说却足够使用了。 看下图的直插式电容&#xff0c;…

中级程序员——uniapp和小程序面试题

&#x1f604;博主&#xff1a;小猫娃来啦 &#x1f604;文章核心&#xff1a;uniapp和小程序面试题 文章目录 用uniapp有遇到一些兼容性问题吗&#xff1f;uniapp最大的优点是什么&#xff1f;uniapp如何实现多端兼容&#xff1f;uniapp是如何做跨端适配的&#xff1f;常用的u…

信息中心网络提出的背景、研究现状及研究内容

信息中心网络什么时候提出的&#xff1f;未来发展前景&#xff1f;有什么著名实验室在做&#xff1f; 1、提出背景&#xff1a; 互联网产生于上世纪60年代&#xff1a; &#xff08;1&#xff09;网络设备数量呈指数性增长 截至2022年底全球范围内预计将有超过280亿台终端设…

YOLO目标检测——无人机航拍输电线路绝缘瓷瓶数据集下载分享【对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;电力系统运维、状态监测与故障诊断、智能电网建设等领域数据集说明&#xff1a;无人机航拍输电线路绝缘瓷瓶数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富标签说明&#xff1a;使用lableimg标注软件标注&#xff0c;标注框质量…

【心得】基于flask的SSTI个人笔记

目录 计算PIN码 例题1 SSTI的引用链 例题2 SSTI利用条件&#xff1a; 渲染字符串可控&#xff0c;也就说模板的内容可控 我们通过模板 语法 {{ xxx }}相当于变相的执行了服务器上的python代码 利用render_template_string函数参数可控&#xff0c;或者部分可控 render_…

ThreadLocal优化

测试类证明一下ThreadLocal存储的数据是线程程安全的 package com.lin.springboot01;import org.junit.jupiter.api.Test;public class testThreadLocal {Testpublic void testThreadLocalSetAndGet(){//提供一个ThreadLocal对象ThreadLocal t1 new ThreadLocal();new Thread…

【SQL server】数据库、数据表的创建

创建数据库 --如果存在就删除 --所有的数据库都存在sys.databases当中 if exists(select * from sys.databases where name DBTEST)drop database DBTEST--创建数据库 else create database DBTEST on --数据文件 (nameDBTEST,--逻辑名称 字符串用单引号filenameD:\DATA\DBT…