算法总结1——暴力枚举

本文介绍了暴力枚举算法的概念,包括其实现方式(循环和递归),列举了枚举条件以及适用场景。通过AtCoderabc258_b的具体实例,展示了三重循环暴力枚举的代码,并指出了该方法在处理复杂问题时的局限性。
摘要由CSDN通过智能技术生成

一.概念部分

1.相关概念

对问题的所有可能情况进行逐一尝试,并从中找到所有符合条件的解决方案。

暴力枚举算法通常采用循环或递归的方式来实现。循环实现通常是嵌套多层循环,逐个枚举每个可能的情况,并在内层循环中对每种情况进行检查;递归实现则是将问题分解为更小的子问题,逐层递归求解,直到找到符合条件的解。

2.条件

   1.枚举的范围一般需要连续

   2.枚举内容需要已知

3.局限性

简单的枚举一般只适用于解决简单的问题,难以求出或范围特别大,明显超时。

下面是举例

二.实例

AtCoder abc258_b

题解:三重循环暴力枚举

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll dx[9]={0,0,0,1,1,1,-1,-1,-1};
ll dy[9]={0,1,-1,0,1,-1,0,1,-1}; 
ll n, ma;
ll a[20][20];
ll calc(ll x, ll y, ll t)
{
	ll res = a[x][y];
	for(int i=1;i<n;i++)
	{
		x = (x+dx[t]+n)%n;
		y = (y+dy[t]+n)%n;
		res = res*10+a[x][y];
	}
	return res;
}
int main()
{
	cin >> n;
	for(int i=0;i<n;i++)
	for(int j=0;j<n;j++)
	scanf("%1lld", &a[i][j]);
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			for(int k=1;k<=8;k++)
			{
				ma = max(ma, calc(i,j,k));
			}
		}
	}
	cout << ma;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值