算法学习——dfs篇——蒜头学算数

原创 2015年11月18日 19:07:20
#include <bits/stdc++.h>
using namespace std;
int n; // 保存读入的整数N
bool opr[10]; // 可以用一个bool数组保存所有n-1个符号,我们用true表示加号"+",用false表示减号"-"。
bool found = false; // 表示是否找到一组解,如果没找到的话需要在最后输出"None"
// dfs函数,保存两个状态:deep表示递归深度,就是枚举到第几个数字左边的符号;sum表示之前部分表达式的值。
// 如果枚举完成后sum的值刚好为0,则输出这组方案。我们需要在搜索的过程中用opr数组保存状态。
void dfs(int deep, int sum) {
    // 请在下面的条件表达式中填上对应的值。
    if (deep == n) {
        if (sum == 0) {
            found = true;
            // 请在下面将最终方案输出,方案格式参照题目描述。
            // 最后记得换行哦。
            for(deep=1;deep<=n;deep++){
                if(deep==n)
                    printf("%d",deep);
                else if(opr[deep]==true){
                    printf("%d",deep);
                    printf("+");}
                else if(opr[deep]==false){
                    printf("%d",deep);
                    printf("-");}
            }
                printf("\n");
        }
        return ;
    }
    // 请在下面的语句中填出正确的逻辑。
    opr[deep] = true;
    dfs(deep+1,sum+deep+1);
    opr[deep] = false;
    dfs(deep+1,sum-deep-1);
}

// main函数请自己完成哦,加油~
int main() {
    scanf("%d",&n);
    dfs(1,1);
    if(found==false){
        printf("None");
    }
    return 0;
}
//此题是一道典型的深度搜索题型,状态之间的不断转移,dfs(1,1)是第一个状态,如果+则第二个状态是dfs(2,3),以此类推,故循环体的  sum = 前一个sum  + 或  -  当前的deep(上一个deep+1)

(深度优先搜索第二课) 蒜头学算数 - DFS

题目描述:蒜头的数学实在是太差了,于是老师把他关到小黑屋让他闭门修炼。老师跟他一张纸,上面一排写着1, 2, 3...N这N个数,中间用空白分隔。老师让他在空白处填上加号或者减号。他让蒜头君求出一共有...
  • Jason_Ranger
  • Jason_Ranger
  • 2015年12月20日 23:52
  • 343

DFS学习归纳总结

看了几次题,dfs还是用的比较多的一种算法,上次做阿里的编程题也是深搜加剪枝。太久没写了,大学学的一点皮毛也都荒废了。DFS这篇博客写的很好,伪代码也清晰明了:深度优先搜索(DFS) 算法入门c++代...
  • u012081713
  • u012081713
  • 2017年03月07日 09:29
  • 295

买书_搜索入门(dfs)

蒜头君去书店买书,他有 m 元钱,书店里面有n 本书,每本书的价格为 pi​ 元。蒜头君很爱学习,想把身上钱都用来买书,并且刚好买 k 本书。请帮蒜头君计算他是否能刚好用m 元买k 本书。...
  • zxk_hi
  • zxk_hi
  • 2018年01月17日 16:36
  • 57

计蒜客课程算法—蒜头学算术(DFS)

#include using namespace std; int n; // 保存读入的整数N bool opr[10]; // 可以用一个bool数组保存所有n-1个符号,我们用true表...
  • xp1994816
  • xp1994816
  • 2015年07月24日 12:47
  • 622

一步一步学ROP之linux_x86篇

0x00    本文仅解释说明蒸米大神一步一步学ROP之linux_x86篇,读者应先阅读这篇文章,遇到问题再来看我这篇文章。    阅读完这两篇文章后,我们会理解ROP(返回导向编程),DEP(堆栈...
  • jltxgcy
  • jltxgcy
  • 2016年02月19日 11:16
  • 2448

到底该如何学习算法?

俗话说“磨刀不误砍柴工”,虽然我已经开始砍柴,但磨刀还是在继续。除了四处搜罗算法书外,我也看了N多前辈的经验之谈,大到刘未鹏的文章,小到网友们对多本算法书的评论,我都有所吸收,也愈加感到知其所以然的必...
  • kingmax54212008
  • kingmax54212008
  • 2015年10月16日 10:54
  • 1895

到底该如何学习算法?

俗话说“磨刀不误砍柴工”,虽然我已经开始砍柴,但磨刀还是在继续。除了四处搜罗算法书外,我也看了N多前辈的经验之谈,大到刘未鹏的文章,小到网友们对多本算法书的评论,我都有所吸收,也愈加感到知其所以然的必...
  • laciqs
  • laciqs
  • 2011年10月16日 15:30
  • 12142

蒜头君学英语--set()练习

题目描述 蒜头君快要考托福了,这几天,蒜头君每天早上都起来记英语单词。花椰妹时不时地来考一考蒜头君:花椰妹会询问蒜头君一个单词,如果蒜头君背过这个单词,蒜头君会告诉花椰妹这个单词的意思,不然蒜头君会...
  • Enterprise_
  • Enterprise_
  • 2017年10月08日 20:57
  • 291

DFS(深度优先)算法编程实践

DFS定义DFS(Depth-First-Search)深度优先搜索算法,是搜索算法的一种。是一种在开发爬虫早期使用较多的方法。它的目的是要达到被搜索结构的叶结点 。特点每次深度优先搜索的结果必然是图...
  • u010321471
  • u010321471
  • 2016年09月19日 10:31
  • 1899

dfs算法经典例题

Oil Deposits #include #include int m,n,sum; char map[102][102]; int dir[8][2]= {0,1,0,-1,1,0,...
  • insanity_forever
  • insanity_forever
  • 2015年07月21日 19:23
  • 1213
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:算法学习——dfs篇——蒜头学算数
举报原因:
原因补充:

(最多只允许输入30个字)