• 【算法总结】枚举


    算法总结-枚举

    定义:依次尝试搜索空间中所有的解,测试其是否符合条件,若符合则输出答案,否则继续测试下一组解。

    注意:在使用枚举这种相对较为暴力的解法来进行解题时,我们对其时间复杂度要做特别的关注。枚举问题的时间复杂度往往与需要枚举的情况个数有关,因为我们必须不遗不漏地枚举每一种可能成为答案的情况。所以搜索空间越大,枚举的时间复杂度就越高。所以,我们在对某一问题进行枚举时,必须保证其时间复杂度在题目时限可以接受的范围内。

    在复杂度允许的范围内,直白的枚举思路简单,代码清晰,在一些看似无从下手的题目面前,我们可以换个角度,试着从更暴力的角度去思考。

    套路:

    1. 给出解空间,建立简洁的数学模型:找出解对应的可能情况,使模型中的变量数尽可能少,它们之间相互独立
    2. 减少搜索的空间:利用知识缩小模型中各变量的取值范围,避免不必要的计算。
    3. 采用合适的搜索顺序:搜索空间的遍历顺序要与模型中条件表达式一致。

    例题:百鸡问题

    #include<iostream>
    using namespace std;
    
    int main()
    {
        int n;
        while (cin >> n) 
        {
            for (int x = 0; x <= 100; x++)
            {
                for (int y = 0; y <= 100 - x; y++)
                {
                    int z = 100 - x - y;
                    if (x * 5 * 3 + y * 3 * 3 + z <= n * 3)
                    {
                        cout << "x=" << x << ",y=" << y << ",z=" << z << endl;
                    }
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    易联云-打印机
    通俗易懂了解Vue中nextTick的内部实现原理
    题解 CF1556E 【Equilibrium】
    题解 P6087 【[JSOI2015]送礼物】
    Redisson分布式锁源码分析
    Java代理模式
    java 8 去重
    jdk 8 list 转map Duplicate key WmSoDetail
    前端单点登录(SSO)
    Linux基础02 bash shell(命令补全, 快捷键, 历史命令, 命令别名alias, ls, man), 目录管理
  • 原文地址:https://www.cnblogs.com/yun-an/p/11048356.html
Copyright © 2020-2023  润新知