枚举算法的介绍

简介: 枚举算法的介绍

枚举

枚举算法介绍

枚举算法 是一种基本的算法思想,它通过穷举所有可能的情况来解决问题。它的基本思想是将问题的解空间中的每个可能的解都枚举出来,并通过验证和比较 ,找到满足问题条件的最优解或者所有解。

枚举算法适用于问题规模较小、解空间可穷举 的情况。它的优点是简单直观,不需要复杂的数学推导,易于实现。但是,由于需要穷举可能的情况,对于问题规模较大的情况,枚举算法的时间复杂度可能会非常高,效率较低。

解空间的类型

解空间可以是一个范围内的所有数字 (或二元组、字符串等数据),或者满足某个条件的所有数字。

当然也可以是解空间树,一般可分为子集树和排列树,针对解空间树,需要使用回溯法进行枚举(搜索的知识点会讲到)

我们目前仅使用循环暴力枚举空间,具体的解空间类型需要根据题目来理解构造。

循环枚举解空间

  1. 首先确定解空间的维度,即问题中需要枚举的变量个数。
    例如当题目要求的是

例题:

小明对数位中含有2,0,1,9的数字很敏感(不包括前导0),在1到40中这样的数包含1,2,9,10至32,39,40,共28个,他们的和是574.

请问,在1到n中,所有这样的数的和是多少?

输入描述:

输入格式:

输入一行包含两个整数n(1<=n<=104 )

输出描述:

输出一行,包含一个整数,表示满足条件的数的和。

代码如下:

#include<bits/stdc++.h>
using namespace std;

bool f(int x)
{
  while(x)
    {
        int y = x % 10;
        if(y == 2 || y == 0 || y == 1 || y == 9) 
            return true;
        x /= 10;
    }
    return false;
}

int main()
{
    int m; cin >> m;
    int ans = 0;
    for(int i = 1; i <= n; i++)
    {
    if(f(i)) ans += i;
    }
    cout << ans << "\n";
    return 0;
}


相关文章
|
7月前
|
算法
class083 动态规划中用观察优化枚举的技巧-下【算法】
class083 动态规划中用观察优化枚举的技巧-下【算法】
52 2
|
7月前
|
算法
class082 动态规划中用观察优化枚举的技巧-上【算法】
class082 动态规划中用观察优化枚举的技巧-上【算法】
61 2
|
6月前
|
算法 JavaScript 程序员
程序员必知:《程序设计与算法(二)算法基础》《第一周枚举》熄灯问题POJ
程序员必知:《程序设计与算法(二)算法基础》《第一周枚举》熄灯问题POJ
35 0
|
7月前
|
算法
枚举算法:解决问题的穷举之道(二)
枚举算法:解决问题的穷举之道(二)
|
7月前
|
算法
枚举算法:解决问题的穷举之道(一)
枚举算法:解决问题的穷举之道(一)
|
7月前
|
机器学习/深度学习 人工智能 算法
算法02-入门算法枚举与模拟算法
算法02-入门算法枚举与模拟算法
|
算法 测试技术 C#
C++单调向量算法:132模式枚举1简洁版
C++单调向量算法:132模式枚举1简洁版
|
算法 测试技术 C#
C++二分查找算法:132模式枚举3简洁版
C++二分查找算法:132模式枚举3简洁版
|
算法 测试技术 C#
C++二分查找算法:132 模式解法三枚举1
C++二分查找算法:132 模式解法三枚举1
|
算法 测试技术 C#
C++单调向量算法:132 模式解法三枚举1
C++单调向量算法:132 模式解法三枚举1