寒假集训一期总结(一)–––思维训练

news2024/11/29 6:39:40

目录

思维训练

走方格

解题思路 

参考代码 

最短曼哈顿距离

​编辑 解题思路

参考代码 

酒厂选址

解题思路

参考代码

雪地足迹Tracks in the Snow

解题思路

参考代码 


一个星期没有更博客了…这一个星期,去学校信竞集训的我收获颇丰,下面就是我的还加集训总结

思维训练

下面是思维训练中比较重要的题目

走方格

解题思路 

本题主要考查了动态规划;

我们用dp1[i][j]记录从(1,1)到(i,j)的最大得分

                        dp[i][j]=max(dp1[i-1][j],dp1[i][j-1])+a[i][j];

我们用dp2[i][j]记录从(i,j)到(1,1)的最大得分​​​​​​​        

        ​​​​​​​        ​​​​​​​        dp2[i][j]=max(dp2[i+1][j],dp2[i][j+1])+a[i][j];

由于要经过点(i,j),但是要去掉(i,j)的最大得分

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        dp1[i][j]+dp2[i][j]-a[i][j]*2

如下图:

 

从左侧绕开(i,j)的最大得分

        ​​​​​​​        ​​​​​​​        l[i][j]=max(l[i][j-1],dp1[i][j-1]+dp2[i+1][j-1]); 

从上方绕开(i,j)的最大得分

                        d[i][j]=max(d[i-1][j],dp1[i-1][j]+dp2[i-1][j+1]);

 所以最多能获得的最小值为

maxn=min(maxn,max(max(l[i][j],d[i][j]),dp1[i][j]+dp2[i][j]-a[i][j]*2))

参考代码 

#include<bits/stdc++.h>
using namespace std;
long long n,m,dp2[2005][2005];
long long dp1[2005][2005];
long long a[2005][2005];
long long x[2005][2005];
long long y[2005][2005];
long long minn=LONG_LONG_MAX;
int main(){
	ios::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
			dp1[i][j]=max(dp1[i-1][j],dp1[i][j-1])+a[i][j];
		}
	}
	for(int i=n;i>=1;i--){
		for(int j=m;j>=1;j--){
			dp2[i][j]=max(dp2[i+1][j],dp2[i][j+1])+a[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			x[i][j]=max(x[i][j-1],dp1[i][j-1]+dp2[i+1][j-1]);
			y[i][j]=max(y[i-1][j],dp1[i-1][j]+dp2[i-1][j+1]);
			minn=min(minn,max(max(x[i][j],y[i][j]),dp1[i][j]+dp2[i][j]-a[i][j]*2));
		}
	}
	cout<<minn<<endl;
	return 0;
}

最短曼哈顿距离

 解题思路

 题意是按照顺序一次去掉一个点后的最短曼哈顿距离,所以每个店需要记录其与相邻两个点的距离和离起点的距离,所以要定义二维数组,因为对于100%的数据满足3≤n≤100000,-1000≤xi,yi≤1000,所以储存所有点的坐标有一点浪费,于是我就用的滚动数组来存储最近三个点的坐标.就可以计算出每一个点的三种距离,滚动数组的下标用%3来区分每个点与之相邻两个点的坐标.

去掉某个点,需要修改新的总距离,例如去掉一号点,会有以下的改变.

参考代码 

#include<bits/stdc++.h>
using namespace std;
const int MAX=100005;
long long a[MAX][3],map1[3][2];
long long pos,n,sum,tot,tmp;
int f(int x,int y,int px,int py){
	return fabs(x-px)+fabs(y-py);
}
int main(void){
	ios::sync_with_stdio(false);
	cin>>n>>map1[0][0]>>map1[0][1];
	cin>>map1[1][0]>>map1[1][1];
	a[1][0]=a[1][1]=a[1][2]=f(0,0,map1[1][0],map1[1][1]);
	for(int i=2;i<n;i++){
		cin>>map1[i%3][0]>>map1[i%3][1];
		a[i][1]=f(map1[(i-1)%3][0],map1[(i-1)%3][1],map1[i%3][0],map1[i%3][1]);
		a[i][2]=f(map1[(i-2)%3][0],map1[(i-2)%3][1],map1[i%3][0],map1[i%3][1]);
		a[i][0]=a[i-1][0]+a[i][1];
    }
	sum=tot=a[n-1][0];
	for(int i=1;i<n-1;i++){
		tmp=tot+a[i+1][2]-a[i][1]-a[i+1][1];
		if(tmp<=sum)pos=i,sum=tmp;
    }
	cout<<pos+1<<" "<<sum<<endl;
	return 0;
}

酒厂选址

 

解题思路

本题主要考查了前缀和and枚举的思想.我用的d[i]记录从1号店到i号点的距离,sum来累加总距离,有余数据是一个单环,所以任意两点之间的距离有两种情况

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        fabs(d[j]-d[i])sum-fabs(d[j]-d[i]) 

选择较小的距离来计算运算成本.由于可能有多个消费相同最大的城市,所以每一个点都要枚举讨论,在这个点修建酒厂是否代价最小.

参考代码

#include<bits/stdc++.h>
using namespace std;
const int MAX=100005;
long long a[MAX],b[MAX],n;
long long tmp,ans,minn=LONG_LONG_MAX;
int main(){
	ios::sync_with_stdio(false);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i-1]>>b[i];
		ans+=b[i];
		b[i]=b[i]+b[i-1];
	}
	for(int i=0;i<n;i++){
		tmp=0;
		for(int j=0;j<n;j++){
			if(fabs(b[j]-b[i])<=ans/2){
				if(j!=i){
					tmp+=fabs(b[j]-b[i])*a[j];
				}
			}else if(fabs(b[j]-b[i])>ans/2){
				if(j!=i){
					tmp+=(ans-fabs(b[j]-b[i]))*a[j];
				}
			}
		}
		minn=min(minn,tmp);
	}
	cout<<minn<<endl;
	return 0;
}

雪地足迹Tracks in the Snow

解题思路

本题我主要是用deque(双端队列)做的,当搜索到不同的动物的时候,我就用pair来记录这个动物出现的下标,(1,1)坐标是最后一种动物,注意不会出现连续着相同的动物进入草坪,因为这样踩的脚印只能由第一个动物去完成.把当前位置的相邻动物入队:相同的动物放队头,不同的动物放队尾.并且记录目前已经出队的动物种类,如果队头对应的动物和之前的动物不同,说明就有新的动物出现,cnt+1;

参考代码 

#include <bits/stdc++.h>
using namespace std;
const int M=4005;
char mp[M][M];
int fx[4][2]={-1,0,0,1,1,0,0,-1};
int h,w,cnt;
char sum,last;
typedef pair<int,int> pr;
deque<pr> q;
int main(){
	ios::sync_with_stdio(false);
	scanf("%d%d",&h,&w);
	for(int i=1;i<=h;i++)
		scanf("%s",mp[i]+1);
	last=char('R'+'F'-mp[1][1]);
	q.push_front(pr(1,1));
	while(!q.empty()){
		pr now=q.front();
		q.pop_front();
		sum=mp[now.first][now.second];
		if(sum==0)continue;
		mp[now.first][now.second]=0;
		if(sum!=last){
			last=sum;
			cnt++;
		}
		for(int i=0;i<4;i++){
			pr pos=pr(now.first+fx[i][0],now.second+fx[i][1]);
			char next=mp[pos.first][pos.second];
			if(next==sum) q.push_front(pos);
			else if(next+sum=='R'+'F') q.push_back(pos);
		}
	}
	printf("%d\n",cnt);
	return 0;
}

这个是寒假集训总结的第一篇文章,所有的文章都在我的专栏里面保存着的.

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

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

相关文章

【小白向】让电脑成为热点WIFI

让电脑成为热点WIFI 本文针对下述情况&#xff0c;有一台电脑&#xff0c;一部手机&#xff0c;但是电脑通过网线连接。此时电脑可以上网&#xff0c;手机没有流量&#xff0c; 仅能通过WIFI上网&#xff0c;但此时没有WIFI。 其实你的电脑可能自己本身就能作为热点发布WIFI&…

绕任一向量旋转矩阵计算思考与实现

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 问题提出 如图所示&#xff0c;在空间中有一向量A&#xff0c;问点O绕A方向逆时针旋转角度α的矩阵如何表示。 问题分析 问题化规 直接去构造一个矩阵是比较困难的。…

自从我学会了Jenkins的自动构建,我再也没有每次都打包上传到服务器然后发布Java服务了

上次我们讲了使用Jenkins部署maven项目 工作两年半&#xff0c;终于学会了Jenkins部署Maven项目 这次我们来讲一下每次提交代码的时候Jenkins自动构建 我们使用的代码仓库是gitee 文章目录&#x1f3c3;第一步&#xff0c;我们在Jenkins中安装gitee插件&#x1f3c3;第二步&am…

Go语言并发编程及依赖管理

目录&#x1f9e1;并发编程GoroutineCSP(Communicating Sequential Processes)&#x1f9e1;依赖管理依赖演变依赖管理三要素&#x1f49f;这里是CS大白话专场&#xff0c;让枯燥的学习变得有趣&#xff01; &#x1f49f;没有对象不要怕&#xff0c;我们new一个出来&#xff0…

Linux (open、write、read、close、lseek、chmod、sync)操作文件的函数详解

目录 一、文件操作方式 二、Linux底层文件操作 1. open 2. write 3. read 4. close 5. lseek 6. chmod 7. sync、syncfs、fsync、fdatasync 三、 Linux 系统调用 四、总结 linux中&#xff0c;一切皆文件&#xff08;网络设备除外&#xff09; 硬件设备也“是”文件&a…

力扣刷题记录——507.完美数、509. 斐波那契数、520. 检测大写字母

本专栏主要记录力扣的刷题记录&#xff0c;备战蓝桥杯&#xff0c;供复盘和优化算法使用&#xff0c;也希望给大家带来帮助&#xff0c;博主是算法小白&#xff0c;希望各位大佬不要见笑&#xff0c;今天要分享的是——《507.完美数、509. 斐波那契数、520. 检测大写字母》。 目…

InfluxDB + Grafana计算成功率

文章目录方式一 借助Grafana的Transfrom方式二 Influx子查询Transfrom介绍建议针对每类Metric&#xff0c;使用一个Metric&#xff0c;增加success的tag区分成功还是失败。 方式一 借助Grafana的Transfrom 第一步&#xff1a;新建2个Query Query Total: SELECT sum("coun…

安科瑞电气火灾监控系统在春晓161#地块人防工程的设计与应用

安科瑞 华楠摘要&#xff1a;本文简述了电气火灾监控系统的组成原理&#xff0c;分析了电气火灾监控系统在应用中的设计依据和相关规范。通过安科瑞剩余电流式电气火灾监控系统在春晓161#地块人防工程电气火灾监控系统项目的实例介绍&#xff0c;阐述了电气火灾监控系统功能的实…

c语言实现扫雷(详细讲解)

本篇介绍,讲解如何使用c语言实现扫雷小游戏. 金句分享: ✨✨✨爱你所爱,行你所行✨✨✨ 目录前言:一、游戏设计思路介绍:效果展示二、游戏的分步讲解2.1、主函数测试区&#xff08;test.c&#xff09;基本构成2.2、游戏中函数实现区(game.c) (重点)2.21、雷盘的创建与初始化函…

centos8 Ambari-2.7.6.3+HDP-3.3.1离线安装详细教程(附安装包)

自2021年1月31日开始,所有Cloudera软件都需要有效的订阅,且订阅费昂贵。此外,CDH6和HDP3将是CDH和HDP的最后企业版本,原有企业版用户无法继续获取新的功能和性能提升。至2022年3月份,CDH/HDP全部停止服务(EoS),用户没办法获取售后支持。由于生产环境系统升级到centos8,…

linux 中 PCIE 中断映射机制

PCIE 中断映射机制 1、 PCIE 中有三种中断方式&#xff0c; MSI&#xff0c;MSI-X 和INTx PCIe总线继承了PCI总线的所有中断特性&#xff08;包括INTx和MSI/MSI-X&#xff09;&#xff0c;以兼容早期的一些PCI应用层软件。 PCI总线最早采用的中断机制是INTx&#xff0c;这是…

基于Flink+kafka实时告警

引出问题 项目使用告警系统的逻辑是将实时数据保存到本地数据库再使用定时任务做判断&#xff0c;然后产生告警数据。这种方式存在告警的延时实在是太高了。数据从产生到保存&#xff0c;从保存到判断都会存在时间差&#xff0c;按照保存数据定时5分钟一次&#xff0c;定时任务…

智慧水务能效管理平台在污水处理厂电气节能中的应用

摘要&#xff1a;污水处理属于高能耗行业&#xff0c;会消耗大量的电能、燃料和药剂等&#xff0c;高能耗不仅会提升污水处理成本&#xff0c;还会加剧能源危机。所以&#xff0c;本文首先探究了污水处理厂耗能的原因&#xff0c;分析了污水处理与节能降耗的关系&#xff0c;然…

MyBatis-Plus数据安全保护(加密解密)

项目创建POM依赖 <dependency><!--MyBatis-Plus 企业级模块--><groupId>com.baomidou</groupId><artifactId>mybatis-mate-starter</artifactId><version>1.2.8</version> </dependency> <!-- https://mvnrepository…

git commit 命令详解

文章目录前言1. git commit 介绍2. git commit 使用3. git commit -m4. git commit -am5. git commit --amend6. commit 多行提交信息7. commit 背后到底发生了什么前言 CSDN 只用来做博客主站文章的转载 博客主站&#xff1a;https://www.itqaq.com 下面地址路径可能会发生变…

Java---中间件---Redis的常见命令和客户端使用

Redis的常见命令和客户端使用1.初识Redis1.1.认识NoSQL1.1.1.结构化与非结构化1.1.2.关联和非关联1.1.3.查询方式1.1.4.事务1.1.5.总结1.2.认识Redis1.3.安装Redis1.3.1.依赖库1.3.2.上传安装包并解压1.3.3.启动1.3.4.默认启动1.3.5.指定配置启动1.3.6.开机自启1.4.Redis桌面客…

VulnHub2018_DeRPnStiNK靶机总结

VulnHub2018_DeRPnStiNK靶机渗透总结 靶机下载地址: https://download.vulnhub.com/derpnstink/VulnHub2018_DeRPnStiNK.ova https://www.dropbox.com/s/8jqor3tuc3jhe1w/VulnHub2018_DeRPnStiNK.ova?dl0 打开靶机,使用nmap扫描出靶机的ip和开放的所有端口 可以看到,靶机开放…

从零开始学习Linux

Linux Linux内核版本&#xff1a;Linux内核运维开发小组&#xff0c;源码在不开源 Linux发行版本&#xff1a;由各大互联网/软件公司定制&#xff0c;开源 一个内核版本是有多种多样的发行版本 Ubuntu&#xff1a;以强大的桌面应用为主&#xff0c;吸收不少Windows用户&…

Docker部署jeecgboot微服务使用记录

docker安装和基础命令 docker安装 docker安装详细步骤 Docker命令 #进入容器 sudo docker exec -it 775c7c9ee1e1 /bin/bash # docker中 启动所有的容器命令 docker start $(docker ps -a | awk { print $1} | tail -n 2) # docker中 关闭所有的容器命令 docker stop $(doc…

(黑马C++)L09 C++类型转换 异常 输入输出流

一、C类型转换 类型转换&#xff08;cast&#xff09;是将一种数据类型转换成另一种数据类型&#xff0c;一般情况下要尽量少的去使用类型转换&#xff0c;除非解决非常特殊的问题。 &#xff08;1&#xff09;静态转换&#xff08;static_cast&#xff09; static_cast使用…