2024.5.29晚训参考代码

news2024/11/24 23:20:36

因为本套题没有BFS例题,所以我先把BFS模板放着

#include<bits/stdc++.h>
using namespace std;
int n,m;//n*m的棋盘 
int dis[402][402]; 
bool vis[402][402];
int X[]={-2,-2,-1,-1,1,1,2,2};//偏移量的表 
int Y[]={-1,1,-2,2,-2,2,-1,1};//定义一个数组,我直接把这些元素从0位置填充进去 
struct node{
	int x;
	int y;
	int dis;//从起点走到当前(x,y)的最短步数 
};
int st,ed;//起点x  y坐标 
void bfs(){  
	queue<node>q;
	node now;
	now.x=st;
	now.y=ed;
	now.dis=0;
	q.push(now);//放入队列,第一个搜索的状态 dfs(st,ed,0)  
	while(!q.empty()){
		//第一步取出队首状态
		//第二步,弹出队首 
		//第三步  判断当前状态是不是已经走过了   后面再来到这个点肯定不是最短距离
		//仅限于所有距离都一样的情况   
		//第四步   判断当前的点是不是终点 
		//第五步  打标记
		//第六步  做相关的数据统计  比如记录(now.x,now.y)的最小步数  
		//第七步  以这个点拓展出去的其余状态  注意判断非法情况   
	}
	//bfs结束 
}
signed main(){
	int x,y;
	cin>>n>>m;
	cin>>st>>ed;
	//memset(dis,-1,sizeof(dis));//初始化数组    
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			dis[i][j]=1e9;//表示不可到达  
		}
	}//dis[i][j]表示从起点走到(i,j)的最短距离 
	bfs();
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
		//	dis[i][j]=1e9;//表示不可到达  
			if(dis[i][j]==1000000000)cout<<-1;
			else cout<<dis[i][j];
			cout<<" ";
		}
		cout<<'\n';
	}
	return 0;
}

马的便利  
#include<bits/stdc++.h>
using namespace std;
struct node{
	int x;
	int y;
	int dis;//从起点走到(x,y)的距离 
}; 
int n,m,x,y;
int X[]={-1,-1,-2,-2,1,1,2,2};
int Y[]={2,-2,-1,1,2,-2,1,-1};
int dis[405][405];
int vis[405][405];
void bfs(){
	queue<node>q;
	node now;
	now.x=x;
	now.y=y;
	now.dis=0;
	q.push(now);
	while(!q.empty()){
		node now=q.front();
		q.pop();
		if(vis[now.x][now.y]==1){
			continue;//已经走过这个点了  
		}
		dis[now.x][now.y]=now.dis;
		vis[now.x][now.y]=1;
		node cnt;
		for(int i=0;i<8;i++){
			cnt.x=now.x+X[i];
			cnt.y=now.y+Y[i];
			cnt.dis=now.dis+1;
			if(cnt.x<1||cnt.x>n||cnt.y<1||cnt.y>m)continue;
			q.push(cnt);
		}
	}
}
int main(){
	cin>>n>>m>>x>>y;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			dis[i][j]=-1;
		}
	}
	bfs();
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cout<<dis[i][j]<<"  ";
		}
		cout<<'\n';
	}
	return 0;
}

在这里插入图片描述
需要考虑记忆化处理

#include<bits/stdc++.h>
using namespace std;
#define int long long 
int vis[30][30];
int n,m,s,b;
int dfs(int x,int y){
	if(x<0||y<0)return 0;
	if((x==s&&y==b)||(x==s-1&&y==b-2)||(x==s-2&&y==b-1)||(x==s-2&&y==b+1))return 0;
	if((x==s-1&&y==b+2)||(x==s+1&&y==b+2)||(x==s+2&&y==b+1)||(x==s+2&&y==b-1)||(x==s+1&&y==b-2))return 0;
	if(x==0&&y==0)return 1;
	if(vis[x][y])return vis[x][y];
	return vis[x][y]=dfs(x-1,y)+dfs(x,y-1);	
}
signed main() {
	cin>>n>>m>>s>>b;
	cout<<dfs(n,m);
	return 0;
}

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
char A[1005];
char B[1005];
int dp[1005][1005];
int main(){
	int n,m;
	cin>>n>>m;
	cin>>A+1>>B+1;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(A[i]==B[j]){
				dp[i][j]=dp[i-1][j-1]+1;
			}
			else{
				dp[i][j]=max(dp[i-1][j-1],max(dp[i-1][j],dp[i][j-1]));
			}
		}
	}
	cout<<dp[n][m];
	return 0;
}

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
long long dp[100005][2];
int main() {
	int n;
	cin>>n;
	//dp[0][0]=dp[0][]
	//dp[i][0] 没抢i银行  
	for(int i=1;i<=n;i++){
		long long x;
		cin>>x;
//		cout<<i<< "  ";
		dp[i][0]=max(dp[i-1][0],dp[i-1][1]);//没抢 
		dp[i][1]=dp[i-1][0]+x; 
//		cout<<dp[i][0]<<" "<<dp[i][1]<<'\n';
	}
	cout<<max(dp[n][0],dp[n][1]);
	return 0;
}

在这里插入图片描述
物品只拿一次,01背包

#include<bits/stdc++.h>
using namespace std;
int V[1005],W[1005];// 
int dp[1005];
//有一大堆财宝,体积分别是V[i]  价值是W[i]  
//你现在有一个体积为M的包,你想知道怎么样拿 能保证  在背包容量的限制下 拿到最多价值的财宝   
signed main(){
    //总背包容量10   
	//只考虑拿价值高的    价值是10,体积是10     可能有其他财宝价值5  体积1  有若干个    
	//dfs(拿/不拿)  暴力   n<=20  
	/*背包dp   01背包   
	dp[i][j]  表示处理完前i个物品 有j的容量  
	单独考虑处理第i个物品,那么是不是跟dp[i-1][] + 如何处理第i个物品=> dp[i][]  有关联 
	如果第i个物品你要拿 
	因为你拿了第i个物品,体积变大,变成了dp[i][j]  
	dp[i][j] = dp[i-1][j-V[i]] + W[i] 
	如果我们不拿第i个物品  变到了dp[i][j]  
	dp[i][j] =dp[i-1][j]  
	?????我们的容量j  
	
	dp[i][j] =max(dp[i-1][j],dp[i-1][j-V[i]]+W[i]);  
	    // j=?+V[i] 
	 */
	 int M,n;
	 cin>>M>>n;//M是总体积  n是物品个数   
	 for(int i=1;i<=n;i++){
	 	cin>>V[i]>>W[i];//输入体积  和  价值  
	 }
	for(int i=1;i<=n;i++){
		for(int j=M;j>=V[i];j--){
			dp[j]=max(dp[j],dp[j-V[i]]+W[i]);
		}
	}
	cout<<dp[M];
	return 0;
}

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
long long T,M,t[10001],v[10001],dp[10000001];
int main(){
	cin>>T>>M;
	for(int i=1;i<=M;i++)
		cin>>t[i]>>v[i];
	for(int i=1;i<=M;i++)
		for(int j=t[i];j<=T;j++)
			dp[j]=max(dp[j],dp[j-t[i]]+v[i]);
    cout<<dp[T];
    return 0;
}

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
int dp[305][305];
int w[305];
int sum[305];
signed main(){
    /* 考虑区间dp 
	 dp[l][r]= 表示把[L,R]的石头合并成一堆所需要的最小花费   
	 
	 考虑转移
	 1 1 1 1 1 1 1
	 所有大的区间一定由小区间转移 
	 考虑合并成长度为2的区间
	// dp[i][i+1]=(dp[i][i]+dp[i+1][i+1])+w[i]+w[i+1] 
	 合并成3区间  来自于长度为2 + 拼长度为1  
	 长度为4的区间  1+3  2+2  3+1  .... 
	 考虑dp[l][r] 拆成两个区间,进行合并  */
	 int n;
	 cin>>n;
	 for(int i=1;i<=n;i++){
	 	cin>>w[i];
	 	sum[i]=sum[i-1]+w[i];//前缀和 
	 }

	  for(int len=1;len<=n;len++){	 
		
		for(int i=1;i<=n;i++){
	 	    //i作为区间起点
		 	//枚举区间长度
			//计算右端点在哪
			int j=i+len;
			dp[i][j]=1e9;
			if(j>n)break; 
		 	for(int k=i;k<j;k++){
		 		dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+sum[j]-sum[i-1]);
			 }
		 }	
	 } 
	  cout<<dp[1][n];
	return 0;
}

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
int n;
int minx = 0x3f3f3f3f,maxn = -1;
int s[305];
int m[305];
int dp1[305][305];
int dp2[305][305];
int main()
{
	cin >> n;
	for(int i = 1; i <= n; i++){
		cin >> m[i];
		m[i + n] = m[i];
	}
	memset(dp1,0x3f3f3f3f,sizeof(dp1));
	memset(dp2,-1,sizeof(dp2));
	for(int i = 1; i <= n * 2; i++){
		s[i] = s[i - 1] + m[i];
		dp1[i][i] = 0;
		dp2[i][i] = 0;
	}
	for(int i = 2; i <= n; i++){
		for(int l = 1; l <= n * 2 - i + 1; l++){
			int r = l + i - 1;
			for(int j = l; j < r; j++){
				dp1[l][r] = min(dp1[l][r],dp1[l][j] + dp1[j + 1][r]);
				dp2[l][r] = max(dp2[l][r],dp2[l][j] + dp2[j + 1][r]);
			}
			dp1[l][r] += (s[r] - s[l - 1]);
			dp2[l][r] += (s[r] - s[l - 1]);
		}
	}
	for(int i = 1; i <= n; i++){
		minx = min(minx,dp1[i][i + n - 1]);
		maxn = max(maxn,dp2[i][i + n - 1]);
	}
	cout << minx << "\n" << maxn;
	return 0;
}

在这里插入图片描述
注意输出格式啊。。。。注意数据类型 long long

#include <bits/stdc++.h>
using namespace std;
int n, m;
int a[1005][1005];
long long sum[1005][1005];
int main() {
	cin >> n >> m;
	for(int i = 1; i <= n; i++) {
		for(int j = 1; j <= m; j++) {
			cin >> a[i][j];
		}
	}
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= m; j++) {
			sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + a[i][j];
		}
	}
	int q; cin >> q;
	while(q--) {
		int X1, Y1, X2, Y2;
		cin >> X1 >> Y1 >> X2 >> Y2;
		cout << sum[X2][Y2] - sum[X1 - 1][Y2] - sum[X2][Y1 - 1] + sum[X1 - 1][Y1 - 1] << '\n';
	}
	return 0;
}

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
int a[100005];
long long int pre[100005];
long long int sum[100005];
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1; i<=n; i++)
    {
        scanf("%d",&a[i]);
        pre[i]=a[i]-a[i-1];
    }

//1   2   3   4   5
//+2      -2
//+3          -3
    int m;
    scanf("%d",&m);
    while(m--)
    {
        int l,r,x;
        scanf("%d%d%d",&l,&r,&x);
        pre[l]+=x;
        pre[r+1]-=x;
    }
    int st,ed;
    scanf("%d%d",&st,&ed);
    long long int ans=0;
    long long int cnt=0;
    for(int i=1;i<=n;i++){
        sum[i]=sum[i-1]+pre[i];
    }

    for(int i=st; i<=ed; i++)
    {
        ans+=sum[i];

    }

    printf("%lld",ans);

}

在这里插入图片描述

#include<bits/stdc++.h>
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define all(x) x.begin(),x.end()
using namespace std;
const double eps=1e-8;
const double PI=acos(-1.0);
typedef long long ll;
template<class T>int chkmin(T &a,T b){return a>b?a=b,1:0;}
template<class T>int chkmax(T &a,T b){return a<b?a=b,1:0;}
template<class T>T sqr(T a){return a*a;}
template<class T>T mmin(T a,T b){return a<b?a:b;}
template<class T>T mmax(T a,T b){return a>b?a:b;}
template<class T>T aabs(T a){return a<0?-a:a;}
#define min mmin
#define max mmax
#define abs aabs
int a[1024][1024];
int main(){
#ifdef cnyali_lk
    freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);
#endif
    int n,m,xa,ya,xb,yb;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;++i){
        scanf("%d%d%d%d",&xa,&ya,&xb,&yb);
        ++a[xa][ya];
        --a[xb+1][ya];
        --a[xa][yb+1];
        ++a[xb+1][yb+1];
    }
    for(int i=1;i<=n;++i)for(int j=1;j<=n;++j)printf("%d%c",a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1],j==n?'\n':' ');
    return 0;
}

在这里插入图片描述

答案   A【1+ 枚举i=2~n 里面所有的A[i]>A[i-1] 的情况的差  

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

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

相关文章

【工具】 MyBatis Plus的SQL拦截器自动翻译替换“?“符号为真实数值

【工具】 MyBatis Plus的SQL拦截器自动翻译替换"?"符号为真实数值 使用MyBatis的配置如下所示&#xff1a; mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl调用接口&#xff0c;sql日志打印如下&#xff1a; 参数和sql语句不…

Docker的数据管理(数据卷+数据卷容器)

文章目录 一、Docker的数据管理1、概述2、主要的技术&#xff08;三种数据挂载方式&#xff09;2.1、数据卷&#xff08;Volumes&#xff09;2.2、绑定挂载&#xff08;Bind mounts&#xff09;2.3、tmpfs挂载&#xff08;Tmpfs mounts&#xff09;2.4、之间的关系&#xff08;…

DBeaver连接Oracle报错:ORA-12514

Listener refused the connection with the following error:ORA-12514, TNS:listener does not currently know of service requested inconnect descriptor ———————————————— 1.报错信息2.配置正确结语 ———————————————— 如果是第一次连接Or…

「51媒体」媒体邀约全攻略

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体邀约全攻略可以概括如下&#xff0c;以确保流程的清晰性和完整性&#xff1a; 一、前期准备 明确目标&#xff1a;清晰定义活动的目标&#xff0c;例如增加曝光度、提高知名度、塑造…

FinalShell 配置SSH密钥登陆

转载请标明出处&#xff1a;http://blog.csdn.net/donkor_/article/details/139355489 文章目录 前言生成密钥服务器配置公钥本地配置私钥存储私钥FinalShell配置 总结 前言 本机FinalShell 配置SSH密钥登陆服务器&#xff0c;这样就不再需要使用密码进行登陆了。由于FinalSh…

【2024新版】银系统源码/超市收银系统/智慧新零售/ERP进销存管理/线上商城/商户助手

>>>系统简述&#xff1a;本系统适用于超吃便利店&#xff0c;美妆母婴行业&#xff0c;服装鞋帽行业&#xff0c;食品零售行业&#xff0c;3C数码电子行业&#xff0c;食品生鲜等一切零售行业&#xff0c;产品功能角色介绍如下 合伙人&#xff1a;无限发展代理商和商…

说明白计算机网络之TCP的流量控制与拥塞控制之慢开始算法与拥塞避免算法

TCP的流量控制 利用滑动窗口实现流量控制 设A向B发送数据&#xff0c;连接建立时候&#xff0c;B告诉A自身的接收窗口大小&#xff0c;A的发送窗口大小不能超过接收方B的窗口大小 流量控制&#xff1a;发送方发送速率不要太快&#xff0c;要让接收方来得及接收。窗口大小的单…

相对论真的很难理解吗?其实一点也不难,原理就在你我身边!

相对论&#xff0c;一个听起来就充满神秘色彩的名词&#xff0c;它在科学界的地位举足轻重&#xff0c;被誉为现代物理的基石。或许你并不了解相对论&#xff0c;但大概率应该听说过。 不过对于大多数人来说&#xff0c;相对论似乎总是笼罩在一层难以穿透的迷雾之中&#xff0c…

未来工厂新篇章:大型工厂3D可视化技术引领工业新潮流

在科技日新月异的今天&#xff0c;大型工厂不再是我们印象中机器轰鸣、尘土飞扬的钢铁丛林&#xff0c;而是变成了智慧与效率并存的现代化生产中心。这一切的改变&#xff0c;都离不开一项革命性的技术——3D可视化。 一、何为大型工厂3D可视化&#xff1f; 大型工厂3D可视化&…

VRTK4.0学习——(一)

此开发基于Unity 6000.0.0f1 1.导入VRTK v4 Tilia Package Importer.unitypackage包 2.在PackManager中查看配置是否正确 3.点击 Window→Tilia→Package Importer 打开面板后点击 Add Scoped Registry 4.首先我们先将CameraRigs导入,CameraRigs中主要是启动VR头盔的功能&…

Web前端三大主流框:React、Vue 和 Angular

在当今快速发展的 Web 开发领域&#xff0c;选择合适的前端框架对于项目的成功至关重要。React、Vue 和 Angular 作为三大主流前端框架&#xff0c;凭借其强大的功能和灵活的特性&#xff0c;赢得了众多开发者的青睐。本文将对这三大框架进行解析&#xff0c;帮助开发者了解它们…

达梦数据库写文件的方式探索

0x01 前沿 这篇文章整体算是《达梦数据库手工注入笔记》的续集&#xff0c;达梦作为国内优秀的信创数据库&#xff0c;在关基单位中拥有越来越大的用户使用量。 通过SQL注入来写文件一直以来都是SQL注入漏洞深入利用的一种方式&#xff0c;对于不同的数据库通常写文件的方式也是…

Check Point 安全网关任意文件读取漏洞复现(CVE-2024-24919)

Check Point 安全网关任意文件读取漏洞复现(CVE-2024-24919) 1.漏洞描述 Check Point Security Gateways 是 Check Point Sofware 提供的一系列 网络安全Q解决方案。这些解决方案包括下一代防火墙(NGFW)、数据中心安全网关和 A1驱动的量子网关&#xff0c;旨在为企业提供针对…

【自然语言处理】Transformer中的一种线性特征

相关博客 【自然语言处理】【大模型】语言模型物理学 第3.3部分&#xff1a;知识容量Scaling Laws 【自然语言处理】Transformer中的一种线性特征 【自然语言处理】【大模型】DeepSeek-V2论文解析 【自然语言处理】【大模型】BitNet&#xff1a;用1-bit Transformer训练LLM 【自…

【RuoYi】实现二级页面跳转

一、前言 在我们写项目的时候&#xff0c;很多时候都会用到二级页面的跳转&#xff0c;RuoYi框架中也不例外&#xff0c;RuoYi虽然前端用的是vue&#xff0c;但是因为其有权限设置&#xff0c;在实现二级页面跳转的时候和普通的页面跳转有所区别&#xff0c;博主这里进行记录&a…

基于朴素贝叶斯算法的新闻类型预测,django框架开发,前端bootstrap,有爬虫有数据库

背景 在当今信息爆炸的时代&#xff0c;新闻内容的分类和预测对于用户个性化推荐和信息检索至关重要。基于朴素贝叶斯算法的新闻类型预测系统结合了机器学习和自然语言处理技术&#xff0c;能够根据新闻内容自动进行分类&#xff0c;提高新闻处理效率和准确性。采用Django框架…

LeetCode-47 全排列Ⅱ

LeetCode-47 全排列Ⅱ 题目描述解题思路代码说明 题目描述 给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 示例 &#xff1a; 输入&#xff1a;nums [1,1,2]输出&#xff1a; [[1,1,2], [1,2,1], [2,1,1]] b站题目解读讲的不好&…

【机器学习】Transformer模型大小与性能探究

Transformer模型大小与性能&#xff1a;不仅仅是尺寸的问题 一、Transformer模型的挑战二、经验标度定律的局限性三、记忆过程与性能动态五、结论与展望 在人工智能和机器学习的领域里&#xff0c;模型的大小与性能之间的关系一直是研究人员关注的焦点。然而&#xff0c;最近的…

CUDA学习(2)

什么是CUDA CUDA&#xff08;Compute Unified Device Architecture&#xff09;&#xff0c;统一计算设备架构&#xff0c;英伟达推出的基于其GPU的通用高性能计算平台和编程模型。 借助CUDA&#xff0c;开发者可以充分利用英伟达GPU的强大计算能力加速各种计算任务。 软件生…

下载安装node.js,查看node.js版本

目录 一、下载安装node.js 二、查看node.js版本 三、使用nvm管理node.js版本 一、下载安装node.js 文档 nodejs中文网•学习教程•入门•如何安装 Nodejshttps://nodejs.cn/en/learn/getting-started/how-to-install-nodejs 步骤 1.进入node.js官网 nodejshttps://nodejs.…