首页 > 编程语言 >南外c++集训枚举题:关灯

南外c++集训枚举题:关灯

时间:2024-07-12 23:20:01浏览次数:14  
标签:tmp cnt mat int pos c++ 南外 枚举

根据标题可知 这道题一定是一道枚举题
这道题考虑使用dfs,处理特殊处理第一层,每次加答案时选最优值。
给出代码:

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int n,m;
char mat[20][110];
int dfs(int cnt,int pos,int tmp)//cnt:楼层pos:哪里的楼梯tmp走到楼梯的步数
{
	if(cnt<0) 
		return 0;
	int ans=0;
	if(pos)
	{
		for(int i=m+2;i>=0;i--)
		{
			if(mat[cnt][i]=='1')
			{
				ans+=pos-i+tmp;//计算
				pos=i;
				tmp=0;
			}
		}
	}
	else
	{
		for(int i=0;i<m+2;i++)
		{
			if(mat[cnt][i]=='1')
			{
				ans+=i-pos+tmp;//计算
				pos=i;
				tmp=0;
			}
		}
	}
	ans+=min(dfs(cnt-1,0,tmp+pos+1),dfs(cnt-1,m+1,tmp+m+2-pos));//两边楼梯,两种情况取小
	return ans;//返回
}

int main() 
{
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	while(cin>>n>>m) 
	{
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m+2;j++)
			{
				cin>>mat[i][j];
			}
		}
		cout<<dfs(n-1,0,0)<<endl;
	}
	return 0;
}

标签:tmp,cnt,mat,int,pos,c++,南外,枚举
From: https://www.cnblogs.com/e4ns/p/18299530

相关文章

  • 2024年06月CCF-GESP编程能力等级认证C++编程三级真题解析
    本文收录于专栏《C++等级认证CCF-GESP真题解析》,专栏总目录:点这里。订阅后可阅读专栏内所有文章。一、单选题(每题2分,共30分)第1题小杨父母带他到某培训机构给他报名参加CCF组织的GESP认证考试的第1级,那他可以选择的认证语言有()种。A.1B.2C.3D.4答案:C第2......
  • 嵌入式C++、Qt/QML和MQTT:智能工厂设备监控系统的全流程介绍(附代码示例)
    1.项目概述本项目旨在开发一套先进的智能工厂设备监控系统,集成嵌入式技术、工业通信协议和人机界面等多项技术,实现对工厂设备的全方位实时监控、高精度数据采集和智能化分析。该系统将显著提升工厂设备的运行效率,大幅降低维护成本,并为管理层决策提供可靠的数据支持。主要功......
  • c++学习
    20240712最近开始看候捷的c++视频,视频是从类开始讲的,过程中发现很多c的知识有点忘了,而且c++也有很多新的语法特性。因此看完前几个视频后花点时间过一下c++primer前六章,记录一下需要学习的c++新特性和代码规范。学引用时有点乱,抽时间搞一下值类型的总结#第二章基本类型lon......
  • C++中的多态
    抽象类概念在虚函数的后面写上=0,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口类),抽象类不能实例化出对象。派生类继承后也不能实例化出对象,只有重写纯虚函数,派生类才能实例化出对象。纯虚函数规范了派生类必须重写,另外纯虚函数更体现出了接口继承。......
  • C++中的引用
        在C++中,我们要学习一个新的概念,叫做引用。引用不是对象,它只是给变量取一个别名。就好比,我们每个人总会右一下外号,或者是小名。当朋友或者家长不管是直接叫你的名字,还是叫你的小名,你都会答应。引用的概念和定义    引用不是定义一个新变量,而是给已存在的......
  • #第3课C++的变量与输入(cin)
    上一节课我们学习了输出(cout),这节课我们将要学习变量与输入,而这些都需要搭配昨天的输出来写,所以昨天的课很重要,不太扎实的同学请看上一讲。在学习今天的课之前我们先来认识几个变量类型:  具体类型字节长度取值范围   int4字节(32位)       -2147483648......
  • c++参数包展开和折叠表达式
    template<typenameT>voidfun2(Tt){cout<<t<<endl;}//利用逗号表达式和初始化列表展开template<typename...Arg6>voidfun1(Arg6...args){intarr[]={(fun2(args),0)...};}template<typenameT>intfunc3Imp(T&&t......
  • 在C++中使用gRPC框架
    概览在gRPC里客户端应用可以像调用本地对象一样直接调用另一台不同机器上的服务端应用的方法,使得您能够更容易地创建分布式应用和服务。与许多RPC系统类似,gRPC也是基于以下理念:定义一个服务,指定其能够被远程调用的方法(包括参数和返回类型)。在服务器端实现这个接口,并运行一个gRPC......
  • C/C++ 避免空指针解引用的方法
    在C/C++中,空指针解引用是一个常见的问题,它会导致程序崩溃或未定义行为。为了避免这种情况,可以采取以下几种方法来确保指针在使用前是有效的:1.初始化指针确保所有指针在使用前都被初始化。未初始化的指针可能包含任意值,尝试解引用这样的指针是危险的。int*ptr=nullptr;......
  • 【C++11新特性】在定义静态成员变量的同时进行初始化
    //test.hclasstest{public:test()=delete;~test()=delete;private:staticconstexprlonglongPOLY_64_REV=0x95AC9329AC4BC9B5L;staticconstexprintBITS_PER_BYTE=8;staticconstexprintCRC_TABLE_LENGTH=256;staticlon......