校内测试-城堡

2024-02-11 16:50
文章标签 测试 校内 城堡

本文主要是介绍校内测试-城堡,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

题目 

 

测试得分:  100

 

主要算法 :  最短路-dijkstra,矩阵动规

 

题干:

  矩阵中求左上角的点到右下角的点的距离,不能从下往上走

 

分析:

  方案1(动规)
  初步判定算法

    对于这题,只能从上往下行走,对于到达每一个点的最优值,一定是从最上方下来的最优值,与左右两边最优值的比较,初步确定算法动态规划

  分析初步算法

     对于从两边来的最优值,只有左边目前是一路DP过来的最优值,而对于右边则是一个未知的,所以要进行两步DP,想从左边扫一遍左值,在从右扫一遍右值,上方,左右三者取一个min则是到这个点的最小花

  方案2(最短路)
  初步判定算法

    典型的最短路问题

  分析初步算法    

    将每一个节点,按照从上到下,从左到右的顺序编号,点数为N*M

     建立到右边一个点,权值为右边那个点的权值的边,再建立到左边一个点,权值为左边那个点的权值的边,再建立到下边一个点,权值为下边那个点的权值的边。边数为3*M*N

     跑一个最短路dijkstra,时间复杂度O(n*log(m)),对于这道题时间上是跑不过去的,可以得部分分

  

 代码

#include<queue>
#include<stdio.h>
#include<stdlib.h>
#define INF 2147483647
#define FORa(i,s,e) for(int i=s;i<=e;i++)
#define FORs(i,s,e) for(int i=s;i>=e;i--)
#define gc pa==pb&&(pb=(pa=buf)+fread(buf,1,100000,stdin),pa==pb)?EOF:*pa++
#define File(name) freopen(name".in","r",stdin),freopen(name".out","w",stdout);using namespace std;
static char buf[1000000],*pa=buf,*pb=buf;
inline int read();const int M=1000,N=1000;
struct Node{int next,to,dis;
}edge[M*N*4];
bool bz[M*N];
int a[N+1][M+1]; 
int n,m,star,end,dis[M*N],head[M*N],num_edge,fdis[N+1][M+1];
inline int min(int fa,int fb){return fa<fb?fa:fb;}
void Add_edge(int from,int to,int d)
{num_edge++,edge[num_edge]=(Node){head[from],to,d},head[from]=num_edge;
}
struct Que{int u,dis;bool operator < (const Que &q) const{ return dis>q.dis;} 
}q;
priority_queue<Que> que;
void Solve()
{FORa(i,1,n) FORa(j,1,m) a[i][j]=read();FORa(i,1,n) FORa(j,2,m) Add_edge((i-1)*m+j-1,(i-1)*m+j,a[i][j]),Add_edge((i-1)*m+j,(i-1)*m+j-1,a[i][j-1]);FORa(j,1,m) FORa(i,2,n) Add_edge((i-2)*m+j,(i-1)*m+j,a[i][j]);FORa(i,1,m*n) dis[i]=INF;star=1,dis[star]=0,que.push((Que){star,0});while(!que.empty()){q=que.top(),que.pop();if(bz[q.u]) continue;bz[q.u]=1;for(int i=head[q.u];i;i=edge[i].next){if(dis[edge[i].to]>dis[q.u]+edge[i].dis){dis[edge[i].to]=dis[q.u]+edge[i].dis;if(!bz[edge[i].to]) que.push((Que){edge[i].to,dis[edge[i].to]});}}}printf("%d",dis[m*n]);
}
void Solve2()
{FORa(i,1,n) FORa(j,1,m)    a[i][j]=read();FORa(i,1,m)  a[1][i]=a[1][i-1]+a[1][i],fdis[1][i]=a[1][i];FORa(i,2,n){FORa(j,1,m){if(j>1) fdis[i][j]=a[i][j]+min(fdis[i-1][j],fdis[i][j-1]);else fdis[i][j]=a[i][j]+fdis[i-1][j];}FORs(j,m,1){if(j<=m-1) fdis[i][j]=min(fdis[i][j],a[i][j]+min(fdis[i-1][j],fdis[i][j+1]));else fdis[i][j]=min(fdis[i][j],a[i][j]+fdis[i-1][j]);}}printf("%d",fdis[n][m]);
}
int main()
{File("castle");n=read(),m=read();if(n*m<=100) Solve();else Solve2();return 0;
}
inline int read()
{register int x(0);register int f(1);register char c(gc);while(c<'0'||c>'9') f=c=='-'?-1:1,c=gc;while(c>='0'&&c<='9') x=(x<<1)+ (x<<3)+(c^48),c=gc;return x*f;
}

 

 

 

 

转载于:https://www.cnblogs.com/SeanOcean/p/11618057.html

这篇关于校内测试-城堡的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/700314

相关文章

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

Verybot之OpenCV应用一:安装与图像采集测试

在Verybot上安装OpenCV是很简单的,只需要执行:         sudo apt-get update         sudo apt-get install libopencv-dev         sudo apt-get install python-opencv         下面就对安装好的OpenCV进行一下测试,编写一个通过USB摄像头采

BIRT 报表的自动化测试

来源:http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-birttest/如何为 BIRT 报表编写自动化测试用例 BIRT 是一项很受欢迎的报表制作工具,但目前对其的测试还是以人工测试为主。本文介绍了如何对 BIRT 报表进行自动化测试,以及在实际项目中的一些测试实践,从而提高了测试的效率和准确性 -------

可测试,可维护,可移植:上位机软件分层设计的重要性

互联网中,软件工程师岗位会分前端工程师,后端工程师。这是由于互联网软件规模庞大,从业人员众多。前后端分别根据各自需求发展不一样的技术栈。那么上位机软件呢?它规模小,通常一个人就能开发一个项目。它还有必要分前后端吗? 有必要。本文从三个方面论述。分别是可测试,可维护,可移植。 可测试 软件黑盒测试更普遍,但很难覆盖所有应用场景。于是有了接口测试、模块化测试以及单元测试。都是通过降低测试对象

day45-测试平台搭建之前端vue学习-基础4

目录 一、生命周期         1.1.概念         1.2.常用的生命周期钩子         1.3.关于销毁Vue实例         1.4.原理​编辑         1.5.代码 二、非单文件组件         2.1.组件         2.2.使用组件的三大步骤         2.3.注意点         2.4.关于VueComponen

如何成为一个优秀的测试工程师

链接地址:http://blog.csdn.net/KerryZhu/article/details/5250504 我一直在想,如何将自己的测试团队打造成世界一流的团队?流程、测试自动化、创新、扁平式管理、国际标准制定、测试社区贡献、…… 但首先一点是明确的,就是要将每一个测试工程师打造成优秀的测试工程师,优秀的团队必须由优秀的成员构成。所以,先讨论“如何成为一个优秀的测试工程师”,

python自动化测试框架--RobotFramework

为什么需要测试框架 在测试中,经常会为了怎样做测试、使用什么测试工具、如何使用、为什么使用测试工具、使用测试工具能帮助到我们什么等等问题而纠结。当我们选择一项测试工具时,如何组织大量自动化用例;如何合理的进行初始化清除;如何批量筛选待执行的用例;如何输出清晰的测试报告,就是需要我们考虑的事情了。下面简单介绍个使用比较广泛的自动化测试框架,即Robotframework。 RF的特点 RF:由pyt