Date:2019-07-01 15:31:11

  • 通俗点理解就是不撞南墙不回头的那种,用栈来实现

算法实现

 /*
题目描述:
有n件物品,每件物品的重量为w[i],价值为c[i]。现在需要选出若干件物品放入一个容量为V的背包中,
使得在选入背包的物品重量之和不超过V的前提下,让背包中物品的价格之和最大,求最大价值(1<=n<=20)。 Sample input:
5 8 //n=5,V=8
3 5 1 2 2 //w[i]
4 5 2 1 3 //c[i]
Sample output:
10
*/ #include <cstdio>
const int MAX_SIZE = ;
int n, V, maxValue = ;
int w[MAX_SIZE], c[MAX_SIZE]; void DFS(int index, int sumW, int sumC)
{
if(index == n)
return ;
DFS(index+, sumW, sumC); //index不放入背包中
if(sumW + w[index] <= V) //剪枝:通过题目条件的限制来减少DFS的计算量
{
if(sumC + c[index] > maxValue)
maxValue = sumC + c[index];
DFS(index+, sumW+w[index], sumC+c[index]); //index放入背包中
}
} int main()
{
freopen("Test.txt", "r", stdin);
scanf("%d%d", &n, &V);
for(int i=; i<n; i++)
scanf("%d", &w[i]);
for(int i=; i<n; i++)
scanf("%d", &c[i]);
DFS(,,); //初始条件
printf("%d\n", maxValue);
} /*
题目描述:
给定N个整数(可能有负数),从中选择K个数,使得这K个数之和恰好等于一个给定的整数X;
如果有多种方案,选择他们中元素平方和最大的一个。数据保证方案唯一。
Input Specification:
从4个整数{2,3,3,4}中选择2个数,使它们的和为6,显然有两种方案{2,4},{3,3},其中{2,4}平方和最大。
*/ //序列A中n个数里选择k个数使得和为x,最大平方和为maxSumSqu
int n, k, x, maxSumSqu=-, A[maxn];
//temp存放临时方案,ans存放平方和最大方案
vector<int> temp, ans; //当前处理index号整数,当前已选整数个数为nowK
//当前已选整数之和为sum,当前已选整数平方和为sumSqu
void DFS(int index, int nowK, int sum, int sumSqu)
{
if(nowK==k && sum==x)
{
if(sumSqu > maxSumSqu)
{
maxSumSqu = sumSqu;
ans = temp;
}
return ;
} //已经处理完n个数,或者超过k个数,或者和超过x,返回
if(index==n || nowK>k || sum>x)
return ;
//选index号数
temp.push_back(A[index]);
//若可以重复选择数字,则把index+1改为index即可,即index号数字可以重复选择
DFS(index+, nowK+, sum+A[index], sumSqu+A[index]*A[index]);
temp.pop_back();
//不选index号数
DFS(index+, nowK, sum, sumSqu);
}

深度优先搜索(Depth First Search)的更多相关文章

  1. [算法&数据结构]深度优先搜索(Depth First Search)

    深度优先 搜索(DFS, Depth First Search) 从一个顶点v出发,首先将v标记为已遍历的顶点,然后选择一个邻接于v的尚未遍历的顶点u,如果u不存在,本次搜素终止.如果u存在,那么从u ...

  2. javascript实现的图数据结构的广度优先 搜索(Breadth-First Search,BFS)和深度优先搜索(Depth-First Search,DFS)

    最后一例,搞得快.三天之内走了一次.. 下一步,面象对像的javascript编程. function Dictionary(){ var items = {}; this.has = functio ...

  3. (转)广度优先搜索BFS和深度优先搜索DFS

    1. 广度优先搜索介绍 广度优先搜索算法(Breadth First Search),又称为"宽度优先搜索"或"横向优先搜索",简称BFS. 它的思想是:从图中 ...

  4. 常用算法2 - 广度优先搜索 & 深度优先搜索 (python实现)

    1. 图 定义:图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合. 简单点的说:图由节点和边组成.一 ...

  5. 算法与数据结构基础 - 深度优先搜索(DFS)

    DFS基础 深度优先搜索(Depth First Search)是一种搜索思路,相比广度优先搜索(BFS),DFS对每一个分枝路径深入到不能再深入为止,其应用于树/图的遍历.嵌套关系处理.回溯等,可以 ...

  6. 图的遍历之深度优先搜索(DFS)

    深度优先搜索(depth-first search)是对先序遍历(preorder traversal)的推广.”深度优先搜索“,顾名思义就是尽可能深的搜索一个图.想象你是身处一个迷宫的入口,迷宫中的 ...

  7. [LeetCode OJ] Word Search 深度优先搜索DFS

    Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from l ...

  8. 深度优先搜索(深搜)——Deep First Search【例题:迷宫】

           深度优先搜索 基本思想:先选择一种可能情况向前探索,在探索过程中,一点那发现原来的选择是错误的,就退回一步重新选择,继续向前探索,(回溯)反复进行. [例题]迷宫问题           ...

  9. Leetcode之深度优先搜索(DFS)专题-559. N叉树的最大深度(Maximum Depth of N-ary Tree)

    Leetcode之深度优先搜索(DFS)专题-559. N叉树的最大深度(Maximum Depth of N-ary Tree) 深度优先搜索的解题详细介绍,点击 给定一个 N 叉树,找到其最大深度 ...

  10. 深度优先搜索 DFS(Depath First Search, DFS)

    深度优先搜索是一种枚举所有完整路径以遍历所有情况的搜索方法.(不撞南墙不回头) DFS一般用递归来实现,其伪代码思路过程一般如下: void DFS(必要的参数){    if (符和遍历到一条完整路 ...

随机推荐

  1. 深入理解js——构造函数的继承

    看了阮一峰的网络日志(http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance.html),记录一下构 ...

  2. EL表达式的简单介绍

    EL表达式的简单介绍 一.JSP EL语言定义 E L(ExpressionLanguage)  目的:为了使JSP写起来更加简单. 表达式语言的灵感来自于ECMAScript 和 XPath 表达式 ...

  3. ac自动机暴力跳fail匹配——hdu5880

    很简单的题,ac自动机里再维护一个len表示每个状态的串长,用s去query时每到一个结点都要暴力跳fail,因为有可能这个结点不是,但是其fail是危险结点,找到一个就直接break 再用个差分数组 ...

  4. linux 下vi与vim区别以及vim的使用

    vi与vim vi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样,它的强大不逊色于任何最新的文本编辑器.他是我们使用Linux系统不能缺少的工具.由于对 ...

  5. 可持化永久树 的 STL ( rope )

    rope 的基本操作 #include <ext/rope> using namespace __gnu_cxx; ]; rope<int> x; rope<int> ...

  6. CSS:CSS 尺寸 (Dimension)

    ylbtech-CSS:CSS 尺寸 (Dimension) 1.返回顶部 1. CSS 尺寸 (Dimension) CSS 尺寸 (Dimension) 属性允许你控制元素的高度和宽度.同样,它允 ...

  7. jmter 二次开发 IDEA 项目5.1

    jmter 二次开发 IDEA 项目5.1 IDEA 编译 Jmeter 5.0(二次开发) 1. Java环境配置 1.1     步骤1 1.2     步骤2 1.3     步骤3 1.4   ...

  8. 前端(十九)—— Bootstrap框架

    Bootstrap Bootstrap中文文档 一.简介 Bootstrap是美国Twitter公司的设计师Mark Otto和Jacob Thornton合作基于HTML.CSS.JavaScrip ...

  9. PCA降维-最大,最小方差解释

    转自http://www.cnblogs.com/jerrylead/archive/2011/04/18/2020209.html http://www.cnblogs.com/jerrylead/ ...

  10. idea一直在copying resources或者一直在build,卡住不动,问题已解决

    IDE在启动项目的过程中,一直copying,或者是build一直卡住,需要在modules中配置下,把target文件夹移出resource folder 同时,在此之前,我还屏蔽了项目中pom.x ...