美文网首页
深度搜索

深度搜索

作者: km15 | 来源:发表于2020-03-03 13:05 被阅读0次

给定一个序列,枚举这个序列的所有子序列,
目的:从中选择一个最优子序列,使它某个特征是所有子序列中国你最优的,如果有需要,还可以保存
这个问题也等价于,枚举从N个整数中选择K个数的所有方案

//序列A中n个数选k个数使得和为x,最大平方和为maxSumSqu
int n, k, x, maxSumSqu = -1, A[maxn];

//temp存放临时方案,ans存放平方和最大方案
vector <int> temp, ans;

//当前处理index号整数,当前已选整数个数为nowK
//当前已选整数之和为sum,当前已选整数平方和为sumSqu

void DFS(int index, int nowK, int sum, int maxSumSqu) {
    if (nowK == k && sum = x) { //找到k个数的和为x
        if (sumSqu > maxSumSqu) {   //如果找到比当前更优的
            maxSumSqu = sumSqu;     //更新最大平方和
            ans = temp;             //更新最优方案
        }
        return;
    }

    //已经处理完n个数,或者超过k个数,或者和超过x,返回
    id(index == n || nowK > k || sum > x) return;

    //选index号数
    temp.push_back(A[index]);
    DFS(index + 1, nowK + 1, sum + A[index], sumSqu + A[index] * A[index]);
    temp.pop_back();

    //不选index号数
    DFS(index + 1, nowK, sum, maxSumSqu);
}

相关文章

  • Swift之深度优先搜索和广度优先搜索

    深度优先搜索 深度优先搜索所遵循的搜索策略是尽可能“深”地搜索图。在深度优先搜索中,对于最新发现的顶点,如果它还有...

  • 《算法》笔记 10 - 无向图

    表示无向图的数据结构邻接表数组 深度优先搜索深度优先搜索寻找路径深度优先搜索的性能特点 广度优先搜索 两种搜索方式...

  • 图的遍历

    结构 深度优先搜索 广度优先搜索

  • 深度优先搜索

    深度优先搜索思路 深度优先搜索 = 回溯法可以通过遍历或者分治法的思想实现深度优先搜索而递归和迭代 (非递归)两种...

  • 数据结构之图的遍历-深度优先搜索(DFS)和广度优先搜索(BFS

    两种遍历 图的遍历分为深度优先搜索(Depth First Search)和广度优先搜索 深度优先搜索(DFS) ...

  • 深度优先搜索和广度优先搜索

    一、深度优先搜索 二、广度优先搜索

  • 深度优先广度优先

    深度优先搜索 广度优先搜索(队列实现)

  • 深度搜索

    在职场上,她把超级搜索和系统性学习方法运用得淋漓尽致,无论交给她的工作之前是否接触过,她都可以快速掌握精髓,即使不...

  • 深度搜索

    给定一个序列,枚举这个序列的所有子序列,目的:从中选择一个最优子序列,使它某个特征是所有子序列中国你最优的,如果有...

  • 深度搜索算法(DFS)

    转载自Hello, it works! 深度优先搜索 深度优先搜索算法(Depth First Search),是...

网友评论

      本文标题:深度搜索

      本文链接:https://www.haomeiwen.com/subject/otcclhtx.html