最新消息,奥特曼六十周年的纪念作即将到来,就在前段时间,远古官方公布了二零二六年新奥商标,翻译成英文为奥特曼 ceo。 这个名字在古希腊语中可以理解为神亦或是上帝的礼物, 如果意义过来,那很有可能是希奥特曼或者迪奥奥特曼,但具体名字咱们还是要等官方公布。不过值得一提的是,从初代到奥美加,每个奥特曼的名字背后都有其深刻的含义。比如艾斯的英文名 s 就 有王牌的地位, 塞文的英文名叫塞文或者七爷,也正意味着他是奥特警备团的第七位成员。而泰罗的名字有太郎的意思,在日本文化里代表着家中长子,暗示了他是奥父奥母的第一个孩子。雷欧就更明显了,英文名略有翻译过来就是他的母星狮子座到平城这边。迪迦意思在印度尼西亚语中有数字三的意思, 对应着他是第一位拥有三种形态的。奥盖亚的名字也来源于古希腊神话中的大地女神,正好符合他大地之光的设定。麦克斯则回归了光之战士的原点设定,用 max 最直观的表达了他是以超光速冠名的最快最强奥特曼。 耐克瑟斯更不用说其英文名 max 本身就带有连结的含义,完美权势了,光是纽带会有人将他继承并再度发光的主题。包括在新生代中,维克特利就是 victory 的 音译, 胜利的代名词。而艾克斯的 x 也有未知、无限、不确定等元素,与他并未明确表明的身份非常契合。还有泰塔斯在古希腊神话中是一个身材壮硕且拥有强大力量的古老族,恰好能解释他满身肌肉的由来。更经典的是泽塔的英文名 g 寄托着艾斯对他深刻的祝愿。 而星耀这个存在的神性和礼物的名字,应该不出意外也代表着远古在奥特曼六十周年的野心。毕竟回顾过往 佳作为三十周年的纪念作,他的优秀毋庸置疑,不仅是奥鹏第一个星云赏,还开创了奥特曼切换形态的先河。而梦比优斯作为四十周年纪念作也广受好评,不仅名字带有无限的含义,还带了花不可能为可能的主题。 tvb 剧中更是将昭和老二轮番拉来客串,充斥着满满的情怀,让无数老粉直呼叶青奎欧布。作为五十周年纪念作, 虽然没能请来前辈客串,但也以卡片的形式,不仅借助多位前辈的力量来切换不同形态,开启了在王时代其优秀的剧情,也成为了无数人心目中的白月光。以至于后来有人提到夕阳下的浪客,就会想起当年他告别奈须美食的场景。 那么新奥特曼作为六十周年纪念作在将来会有什么样的表现,就请大家拭目以待。
粉丝7.8万获赞178.5万

原来每天的生活都能有回放啊! 这几天脖子上多了个小东西,就是这个 loki, 它是一个多模态 ai 可穿戴设备,可以看见、听见并且记录我的日常。那今天来聊一下最近的使用体验, 还有一些让我意外的小功能。首先它是有一个挂绳,像这样固定在衣服上,磁吸柱来保持稳定,基本上是一个无感的状态,按下就能拍摄。那如果你是爱人,应该会很喜欢 loki 的 记录方式。之前我们出去想拍点什么,要举着手机,那人多的时候就会有点尴尬。但是现在可以用 loki 去 沉浸式记录它,这个故事模式可以设置每隔几分钟就自动去录一段,然后就带着该干嘛干嘛,不会显得很刻意。那除了第一视角,也可以把镜头对向自己,比如放在桌子上去记录第三视角,因为它真的非常轻,我还给家里的小猫试戴了一下, 不过它竟然是 ai 可穿戴设备,那能做的肯定就不只是拍摄记录。还有几个我自己很喜欢的是每天早晨会收到它推送的一条小短片, 有点像 vlog。 第一视角去回看前一天的日常,因为是自动剪辑嘛,就有一种开盲盒的感觉,还蛮有趣的。还会有一个非常可爱的小漫画,我把它们都打印出来了,然后贴上 nfc 贴纸,手机扫一下就能看到当天发生了什么,感觉会是一种很新的记日记的方式。另外是可以主动向他提问的。现在出门要穿什么?今天大 新区气温在负七摄氏度到三摄氏度之间,多云,建议穿羽绒服、厚毛衣等厚重保暖衣物, 出门注意防风。如果记性不好,也可以让他去帮忙回忆。我前天是几点去的咖啡店?你前天是下午三点十五分左右去的木屋咖啡馆,还点了香草和桂花风味的拿铁呢。除此之外呢,会感觉他有在理解我的生活。这几天他一直都在记录我做了什么, 然后给我提些小建议。像上周有一天我吃饭比较晚,你看他提醒我吃过宵夜后适当运动,不要立刻躺下。 ok, 以上就是这几天 的使用感受,总的来说还挺惊喜的,我们其实很少有机会去完整的回看前一天的生活。那这种可以回溯记忆的体验大家觉得怎么样呢?


哈喽,各位同学你们好,我是王老师。在这个钻戒当中呢,我们开始去呃学习剪枝, 通过前面的学习,我们理解了什么是深度优先搜索还有回数,对吧?那在这个钻戒的话,我们开始去学习剪枝, 包括说我们后面会学习到的这个计划搜索,那计划搜索的话,我们会搭配 dp 去讲解。首先的话我们来看这什么是减脂, 这个时候同学们要好好拿一下这个笔记本,那减脂的定义呢?是在搜索跟回溯的过程当中,我们提前去判断。呃,当前的状态合不合法, 因为如果说你当前的状态合法的话,我们是可以走下去,那如果说你当前的状态不再合法的话,我们就把它剪掉, 那老师的建议的话是你拿纸根笔把这段圈起来的抄上吧。那可能有同学就说会好奇我们为什么学剪子,那你注意看老师圈的这一边, 减少无用的低轨啊,提升效率。我们在之前学习回数的时候,我们讲过了,就是 回数的话,它会每举所有的路径,对不对?还记得吗?参考我们的回数的第二个章节。第二个章节,第二节啊,所有路径对不对和那个最小的路径。 呃,这个知识点要记住,因为在后面我们讲解 b、 f、 s 的 时候,那么我们还是会用到这些概念, 所以的话,同学们把这个老师圈起来的这一部分吧,你们可以呃抄下来会好一点。 然后呢,我们在做搜索的过程当中呢,它其实就像一棵大树,那每一条树的话,它都会有一个什么,它都会有一个分支,有分支必然会有什么?必然会有节点,对不对?比如说我们画一个简单的树吧, 对吧?有分支的话它必然会有节点,对不对? 这个能能理解吧?这个是节点嘛,对吧?你每一个的分支嘛?所以的话,这个说同学们还是数的概念还是要。呃,激起了。 减值的话,就是我们把一些我们过滤的条件,那比如说你可能说实在是不好理解呢什么的减值就是 我们把一些多余的数字我们给砍掉,就是我们认为当前这个不合适的,我们直接把它剪掉。你比如说你有十颗树枝,那你感觉当前的状态有五颗树枝的,这个是不对的,那你把这五颗剪掉,那你剩下的是不是从原来的十颗 呃,变成了五克,那也就是说你的时间效率会大大提高,对吧?那么我们为什么要减脂呢?就是没有减脂的话,我们思考一下我们回速的那个过程 是不是所有的路径?比如说我们那个时候我们不是用了一个矩阵吗?对不对?我们用了一个矩阵,你我们然后的话,我们使用回速的时候,他会每举所有的这个路径吗? 对不对?比如说这边是 s, 这边是 e, 对 吧? star 很 棒的。那你回数的话,你比如这条路能到这边,对不对?然后它会回撤,再试一下这条路,这条路不行再回撤这次这一条路,对吧? 我相信这个基础的这个知识点同学们还是能够。呃,记住,那我们有了减脂的话,就是我们可以大大的提高一些无效的分子, 其实核心的话就是我们只需要判断当前的这个状态合不合法?如果合法那我们就往下走,不合法我们直接砍掉, 因为你当前的不合法的话,后面的话就不会合法。那另一种情况除外,就是说比如说你这个走错了,你后面还有补救的余地,对不对?比如说你后面可以回头,那这种的话也是可以的。 剪辑的话他不会影响你的这个程序的正确性,他的目的是为了让你的程序能够更快。那这段的话,呃,同学们最好还是抄一下啊,写到你们的本子跟笔上面会好一点。 那他们本节课的话,你能够知道又是 d f s 在 一棵树上行走,回数的话,它不是跳跃,而是就是函数返回后继续执行。呃,这个概念的话,老师在讲回数的时候我们也讲过, 其实这两个概念的话,我们在呃火血填充那个 flow 的 view 对 吧?也就是说变类型地归跟那个回溯,我们都讲过这个概念,但我希望你们记得,你们不要忘记知道, 那 ok, 我 们回到子集的这个问题吧。为什么拿子集?在我们回数的最后的几个章节,我们讲了子集跟全排列对不对?那这个用来讲这个简直的话还是比较合适的, 我们来看看,比如说我们有三个数据,一二三对吧?我们选它的子集对不对?我们在倒数第二个视频,应该倒数第二个视频还是倒数第一个视频回数的啊? 我们是不是做了子集的美举,做了两道题,第一道题的话是呃怎么去讲这个美举?然后的话,第二道题是我们怎么去实践它,对不对?同时的话我们还讲了当时那道题可以用什么?可以用 dp 去接,对吧?用 dp 的 零一背包 对不对? ok 啊,那我们来看一下,我们跟着交往,我们一步一步走吧。核心的约定,首先的话就是我们在设定一下, 因为我们之前在做那个子集的时候,我们是有选或者不选的一个问题,对不对?然后的话我们每一层呢,我们就处理一个元素这一部分头上面要记住啊,等下 我们在讲搜索树的时候,就是啊,我们会围绕这个约定,我们会去讲那每一个节点他会有两个分支,左分支的话 我们是选当前的,右分支的话我们不选当前的,注意啊,从节点开始。同学们,我们从节点开始,知道吗? 左边选当前,右边不选那 d f s 的 方向的话,我们是先左指数,然后再右指数,对不对?我们之前讲二三数的时候,呃,数的便利还记不记得啊?我希望你们还记得好不好? 然后的话,同时的话我们用一个新号表示当前的这个节点,节点的话我们当前给它拍一个照, 这一部分的话同学们可以就是呃,拿笔记本抄一下,因为等一下我们要做一个模拟,所以的话如果说你们抄下来了的话,呃,等下老师在做模拟的时候你们就知道,呃,老师为什么会这么模拟? ok, 我 们回到这个 d f s 数的整个过程,这个是回数的一个完整的一个过程。那首先的话,我们在最开始我们是不是打印了一个空,这个时候同学们还记得我们的那个 啊帕去点 pushback, 然后的话把那个帕去压到对战,还记不记得 啊?这个时候其实你们也可以把代码,呃,我看看我上面应该写的代码,对不对? 我们把代码放进去,这个还记得吗?我们在讲子集的时候,其实我们讲过这个,那的话我们再从左边先走左子数嘛,对吧?我们先走左子数那 ok, 好, 我们从左子数走到这边的时候,我们的约定是什么? 左选当前,右不选,对不对?然后我们左指数优先,那左指数优先的话,那我们的访问方式应该是跟左左左右,对不对? 这个能理解吗?他说其实你能够看到我们在整个的这个过程当中呢?他左边的话都选了什么?左边都选了当前的元素。比如说第一层我们选了一,第二层的话我们要选,因为我们之前有一个一,所以我们的话怎么样要再选当前的二 点,到第二的话,然后你激动第三层的时候,对不对?你此时的 pass 里面有一和二,那你还要选当前的,那就是三, 这个我相信同学们应该能够理解,对不对?这也就是为什么老师说把你要把这个记下来的一个原因在哪里?就在这里,知道吗?这样子老师在讲解这个数的过程当中, 那你就会很好的理解那到这边的手,因为你到了第三层吗?注意哦,这个是回数的这个过程哦,这个是我们用回数,我们此时还没用到减值。你可能会好奇,老师你为什么先讲回数,而不是先讲减值? 因为先讲回数的话,等一下我们再讲减值,你就会有一个很好的对比,这样子你就会比较好理解。那么在第三层的时候,此时的话应该是什么? index? i n d e x 等于等于 n 的 时候它怎么样 返回?它此时要打印什么?它要去对不对?然后锐腾 r e t u 八 n, 锐腾,锐腾到哪里?到这里是不是它这里?之后 e r 的 话右边对不对?然后往这边, 这个能,能理解吗?我们先左嘛,再右嘛,因为你这边还有一颗右指数嘛,对不对?然后的话你整个到这里的时候,整个左指数怎么样? 你就便利完了,是不是?然后再往右边,是不是?你右边的话怎么样?你不选当前的吗?因为你一下来的话,你不选这个第二层,第二层的不选对不对?然后再往下走, 然后这个的话就是我们整个的一棵这个树的这样的一个过程, 然后的话我们要理解的一个是什么?就是每一个节点它都是一个状态,因为我们等一下再讲剪子的时候,我们需要通过判断它的一个状态, 那我们决定剪还是不剪?那 dfs 的 路的话,就是我们把所有的什么, 把所有的节点都怎么样?都走一遍,都拍到,对不对?我们回到这边,你看 我们的约定是什么?左左左指数选当前的右指数,不选当前的,对不对?然后什么时候记录答案?我们进入一个节点,我们就记录一次当前的一个子集, 然后的话我们来回头看看这个众象展开的这样的一棵搜索树。最开始我们从第一层对不对?一直进来到一二一二,然后一二三, 一二三的话,因为你已经到哪里了?已经到这里了,所以你要怎么样返回到一二?一二等于说你的这个左指数,你就怎么样走完了,这个时候你走什么?走?右指数返回来,对不对?这个能理解吧? 拿的话,这个时候你再怎么样,因为你到一二的时候你怎么样?已经走,右指数已经走完了嘛,对吧?你右指数已经走完了嘛?所以的话,你这个是要返回行吗?你要返回到一返回到这个位置, 对不对?因为你这个是什么?是整个一的水一的这个浊指数嘛,对吧?那你从一再开始怎么样?再开始往下走,知道吧?啊?你看走一三对不对? 然后的话我们一三走到哪里?走到这边我们再返回,对吧?这样子的话你整个什么?你的整个的这个左指数就走完了,然后这边的话是你的右指数, 然后从右右指数,我们这边的话,呃,开始去找,还记得我们的约定吗?对不对?先左指数,然后再右指数,这也就是为什么老师让同学们先写的一个原因,就在这里。 ok, 那 我们回到刚刚的这个数这边,这边我们要记住就是我们 d、 f、 s 从来没有重新回到复结点,再调用一次,我们是直接返回,只有从子函数返回的时候,我们才会怎么继续执行这个负函数的这段代码, 我相信在回数的过程当中你们应该是已经比较好理解了,那这个代码的话,你像我们之前在讲子集的时候,我们已经讲过,对不对?你比如说你一进来对不对?那还没显你的这个这一行的话,它就怎么样? 它不会执行嘛?对不对?只是你的这个 part part 是 一个空嘛? 是一个零嘛?你可以把它理解为是一个零,对吧?然后不管你进来之后你的这个音大概只是一,只是一,一在 part 里面,对不对?所以的话,你第一次你永远会说出一个什么? 你的第一次永远会说出一个这个空,我看看我们空在哪里?我们的空在这里,对吧? 所以你第一次你又会说出一个空的原因就是在这里毛毛和代码这边,然后你第一次你一步两步往下执行,执行到这里的时候,对不对? d s 加一对不对?美好进入第一层,第一层你这个时候此时是左指数哦, 因为我们我们说了先左后右嘛,对不对?你第二次一加一的时候,你这个时候就怎么样?你一是不是保你这个零是不是变成了一啊?一?那你只是 pass 的 时候,只是你的一已经进来了,注意 你的 e 已经进来了,知道吧?因为你这边的话,你这个 in tab 是 也进来了,知不知道此时你的 e 进来了?拿的话,这边判断 in tab 是 此时是 r 嘛,对吧? 因为你加了 e 嘛。嗯, r r 不 会等于什么?比如说我们 n 等于三的时候,对不对?它不会等于它,所以的话,它此时它要把这个 in tab 的是怎么样? 放进去,知道不?把数据放进去,然后干进来,对不对?然后你二加一,二加一等于三, 然后你删进了,你删的时候对不对? excel 是 会等于三,对吧?然后他怎么样他就返回,他返回到哪里?他返回到二的时候,他返回了他的上一层,明白了吧?所以这个时候,呃,同学们要 好好把这个回数的代码好好就是呃记起来,知道了。 然后的话,这个手的话,其实老师在课间这边的话写着就是呃一对应的一个关系,那么我们现在来看一看就是减值,对吧?因为我们前面的话一直在铺垫这个回数的这个过程, 那我们来看看减值,这个时候注意啊,就是我们减值的条件,我们这里限制了子极的一个大小,所以我们开始减值, 为什么这么写的一个原因呢?就是如果说我们不限制子极的大小,那么我们就没有必要减值,我们直接回数所有的就好了, 知道了,我们直接回数掉就好了。那通常来说,我们在如果说有一道题就是让你每举子集,每举所有的子集的话,那么你是不需要减字的, 因为你所有的每举的子集的话,他需要你什么,所有的点都走一遍,所以的话,此时的话你就没有必要去减字,知道了, 这个时候注意啊啊,我们这边限制的条件是限制了这个自己的一个大小,知道了你也可以把它理解为就是 带条件的回数,知道吧?在我们回数的作业当中,我相信同学们都还记得我们的课后作业有很多的这个带条件的约束回数,对吧?其实你也可以把简直理解为是带条件的回数,也可以的, 所以我们这边子集的大小是大于二就不再计入,也就是说你每举所有小于等于二的一个子集,那你比如说 三对不对?一二一三不都是合法的自己这个能理解吗?那你可能会问一二三行不行?一二三不行,因为你超出了三的大小,对吧?你只能小于等于二,明白了吧? 那 ok, 我 们还是回到刚刚的那一处,我们还是回到刚刚的那个头,然后的话我们左边,从左边一直往下下来,对不对?到这个点它刚好是二, 但是你到第三层的时候它怎么样?它又直接被剪掉了,能明白了吧?但是你能够看到后面所有的什么元素,它的大小都不会超过二, 明白了吧?它的 d、 f、 s 的 顺序并不会变,简直不是少计答案,而是整颗指数都不存在,它在这个位置呢, 在这个位置会判断当前的一个状态,也就是你可以把它理解为是一个呃元素的大小或者数值的大小,通常来说我们把它称之为是一个状态,如果说当前的状态怎么样? 呃,我们可以把它设为一个 p 点骰子吧,好了,大于 n, 因为我们如果 n 等于二的话,我们就怎么样 rateton 嘛, 这样的话我们就简直成功了。其实这里跟我们之前讲的那个带条件的回数 大差不差,知道吗?可以的话就是同学们可以把这个三点呃记下来了。然后的话我们来看一下,就是众象这个视角上的减值,其中你会发现我们这个跟回数是特别的,像我们只是多了一个什么,多了一个 if, 判断 if 什么 part 与 n, 我 们就返回 return, 知道吧?所以的话简直不是回来的更快,而是从一开始只要说我知道你这个状态不对,我直接给你砍掉,对吧?砍掉了,那你这颗这个是不是路径就变少了呀,对不对? 那一句话总结一下原则吧。总结一下我们上半节课所讲的就是,呃,当你能证明当前状态不能扩展出就是任何合法的答案,那么你的简直才会有意义。 呃,这个能理解老师所说的是什么吗?就是,呃,如果不理解就没关系,不理解也没关系吧,我们后面会讲的, 然后的话我们来讨论一下。就是,呃,从搜索树的角度来看,一看就是什么时候该剪什么时候不该剪, 这个时候你同学们脑袋里面要有一颗那个树的那个图像对吧?你如果说你再走一个呃,子集对不对?特别就像子集吧,我们拿子集来做例子 啊,请你说出所有小于二的字迹对不对?那你本身的 n 可能等于四对吧?那你在判断的时候你的 pass 赛子如果说大于二的时候就说明已经不合法了, 不合法的话其实你就没有必要再收了吗?对不对?你比如这边是空,这边是一,这边是一二对不对? 那这边你明显就是一二三的吗?你这个状态明显已经不合法了,所以的话对不对?你这边会怎么会?杀掉了吗?那他的指数也会杀掉了吗?也就没有了吗?能明白吧?如果说你实在是呃 不好理解,那没关系,那你就先记住老师刚刚讲的就是你只需要判断当前的状态是否合法,如果合法的话那我们就保留,如果不合法的话我们就不去保留就好了,对吧? 单调性。单调性的话我们之前有讲过啊,就是减脂的话就是几乎总是某呃依赖某种的单调性, 那我们这边的话其实可以看他就是呃常见的一些这个剪辑的这个单调量,同学们可以把这个写到本子上面去,写到你们的笔记本上面去,知道吧? 你比如说纸质的大小,组合纸质,但他这个能不能剪辑的原因是题目有没有要求的?他有没有要求?你说输出这个纸质的大小,对不对?包括说组合纸质和背包, 你比如说迷宫路径保持恩皇后跟搜索,这个我们之前都是讲过的,同学们可以把视频暂停一下,然后的话我们先把它写上去,然后我们再继续往下观看,好吗? 什么时候剪辑是毫无意义的,就是我们完整的子集,对不对?你比如说你这个子集我们在上面讲过了,我们讲排列吧,排列的话,如果说你所有的排列都要列出来的话,那你肯定是不能剪的, 还有那个 d f s 便利型地归你不能捡,对吧?其实你可以把它的总结就是如果说你的你的答案需要所有的节点都参与,你肯定是不能捡, 对吧?如果说这个你你不想记,你不好理解,那你就记老师的一句话就是如果说你的最终答案需要所有的节点参与,就不要用减字,那样你的答案一定是缺失的,你的答案一定会出问题, 到我们出问题的类型也可以快速的判断要不要减,那其实就是像我们之前讲的,呃,有没有合法的一个状态, 对吧?然后是比如说你这个状态不行的话,你状态不行的话,我们能不能变回去,对不对?你状态不行后,你后面会不会一直就是不行,对吧?这个在我们后面用代码的时候,我们会详细的去讲一下, 然后你像这一部分的话,其实我们在前面的话我们也做了讲解,对吧? 在什么情况下我们会用到减值呢?就是我们只记大小,小于等于 k 啊,组合恰好有 k 个,包括说我们的恩,皇后, 呃,迷宫的最短路径这几道题,这几道例子在我们之间都讲过,所以的话就是我相信同学们也比较好理解,懂吧? 那后面的话我们来看看,减字不是加速的技巧,对吧?而是基于问题约束的逻辑。三减就是 你可以就是像我们之前所讲的,我们的作业写了就是在约束条件的回数,其实就是减字,知道,其实就是减字,没有约束的话就没有减字,知道吧?然后我们约束越强,减字越狠。 那今天的理论的话其实特别的多,我相信同学们可能听的已经就是不耐烦了。那么这节课的话我们到这边基本上结束了。在下一节课的话我们会开始讲这个减脂的一个基本的形式,包括说他的一些基本实现。 那这节课的话我们到这边就结束了,我是王老师,我们下一期再见。

哈喽,各位同学你们好,我是万老师。在上一个视频当中,我们通过从图慢慢地走到这个搜索的过程当中, 我相信通过上面那节课的当中的话,同学们已经对这个 dfs 它不单单是在见图, 什么情况下需要见图?当题目给定要求的时候,它是很明显我们在七五三这道题当中,我们并没有见图的一个必要,对不对?它是有没有见数的必要?有必要, 因为我们的 dfs 其实它整个的它是在在走一个数。呃,当然如果说你要说再再走图的话,我们再把数画出来整理成图,那也是可以的, 所以的话,在这节的话,我们还是顺着上一节的视频我们去讲, 对吧?我们首先的话肯定要掌握这个知识点,构造性的 dfs, 当如果说你能理解这构造性的 dfs, 那 么你就会明白老师所说的搜索,对吧?那我们来看一下练习,一,给定整数 n 用 dfs 生成不超过 n, 注意 不超过 n 的 只有数字一和二组成的正整数,对吧? 我们来看下这个搜索数的过程,零一对应的是什么?是不对应的 x 乘以十对不对?加加上一对吧,这个是我们 d f s 的 过程吗? do we? 但你前面是不是要判断一下,判断谁 x 是 否大于 n, 如果大于 n, 你 需要怎么 return 返回,对吧? 那所以说第一次的话它变成了一,第二次变成了十一,对吧?第一次变成了一嘛,第二次变成十一嘛,对不对?因为你第一次的话也是零乘以十嘛? 这个像,这个像不像我们之前的一个拆分?很像,是不是?我们用 y o y o 循环的话, y o 循环的话,我们是不不停地除以多少?除以十,对吧?求于 十对不对?比如说 x, 比如说这边 a 等于 x 求于十,然后 x 除等于十,对吧?然后上面有一个 y o, 其实你们发现它这个刚好跟它那个相反, 当你第三次的时候,第三次因为你变成十一十一,你再乘以十的时候,假一明显你等于一百一十一,那这个时候就会触发这个递归的这个过程,对吗? 那我们来看一下这个代码,其实你会发现这个代码就是像老师刚刚写的那个是一样的,我们来走一下,好吧,我们来走一下, 我们比如说这个 x 从零开始进了,对不对?哎?好,零的话进了 不执行,不执行,执行,对吧?零乘以十等于零,零加一结果得到一, ok, 好, 这边的话开始调用谁调用 dfs, 对 不对? 乘以 x 等于一,对不对? x 不 会大于 n, 那 我们假设 n 的 话,我们看看 n 的 话,我们就等于三十吧,好不好? 那的话一不等于零条件成立,对吧?直行输出了一个一, 一乘以十加一等于多少?十一,十一的话,这边同样不执行,对不对?十一不等于零,所以这边再次输出一个十一,回到我们的搜索数是不是一样的? 我相信同学们这个应该会比较好理解。然后我们打开变一器, 然后我们再仔细下这个过程,这边的话我就把这个拿掉就好了, 我把这个代码 copy 一下, 因为的话我们只有一个参数,所以的话我们怎么样?我们从零开始,那 on 首这边的话,其实我们是没有的,我们可以把 on 首注置起来, 对吧?拿的话我们 n 是 怎么样?三十,首先的话我们先让它运行一下,我们来看一下,我们先看一下结果,看看它的一个输出数据好不好? 我们看看变异是语法哪里有问题?隆隆。 n, 那 我们把它注视一下好吗? 一十一,十二,二,二十一和二十二,我们来看一下,一十一,十二,二二,二十一,二十二, 好像是一样的吧,对不对?跟我们的说说是一样的,那这个时候的话,同学们如果说还不是很理解的话,其实到这边你们应该理解了,如果说到这边你们还不理解,那,那可能就是 完蛋了,然后我们才去约行一下,我们跟踪一下好吗?我们跟踪一下,这,这跟踪之前的话,同学们要把老师刚刚讲的这个过程你要稍微记一下,不然的话这个你可能听不太懂。 df 是 开始进了对不对? x 等于零,是不是?这一条不执行,因为 n 等于三十,这条也不执行,因为 x 等于零,所以它不走。我看一下,我们第一次进来,我,我们第一次进来,零乘以十加一, x 变成了一看到没有变红了,我可以进来,好, x 不 等于零,因为 x 此时是为一,所以的话我们执行完这段的话,这个会输出一个一,我们来看一下好吗? 输出了一看到没有一的话,一乘以十加一,一十得十四加一等于十一, x 变成十一,进来 x 不 小于三十,十 一不等于零,输出十一,看到没有?十一再乘以十,对吧?这个时候你就超了呀, 对不对?这时候你抄了十一乘以十的话,多少?一百一十啦,一百一十,你再加一百一十一啦,对不对? ok, 怎么样?返回对不对? 因为你这时候的话,你的第三层结束了嘛,对不对? ok, 好, 然后你要怎么样?回到这个下面,你要执行这一行,对不对?你要执行这一行, 然后的话我们 x 等于几十一,十一乘以多少十,再加二,对不对?它这么说它一百一十二,它怎么样?它还是会超,对不对?它再返回,注意 x 变成十一,对吧。 这个时候我们回到什么?回到这个 d、 f、 s 里面,看到没有?再乘以十,图一看变成了多少十二,对吧? 然后的话你十二会小于三十,数出十二,整个过程的话,其实就是这个样子, 然后我们回到这边,你会发现整个的 d、 f、 s 的 过程跟老师的这个是讲的是一模一样的,对不对?那 ok, 好, 我们来看看第二个这个小问题 啊,然后的话我们来思考一个问题,为什么 r 一定在呃第一之后?为什么? 但是您知道吗?因为我们最开始是先走一再走啊,如果呢?你把二放前面,就是先走二,再走一, 这个数,其实你回顾下我们的这个二差数的时候,其实你就会比较好了解,知道吧?那我们来看看练习二 d f、 s 的 顺序变化,数不变,走法变啊,这个是反掉了,知道,这个是反掉了, 这个是反调的,正常来说应该是先走啊,知道吧,所以的话我这边标注一下,我这边就懒得去改了, 写一个反他,这个其实跟刚呢是一样的,我们的话因为是零乘以十加啊,那也就是先错啊,这个位置应该是二,知道吧?那我们其实可以,呃。嗯,其实你会发现我们就是把这改一下,我们可以把这改了就好了, 然后的话你就能看出它的一个呃,搜索的一个数的过程,知道吧? 呃。我们把它断点打开嘛, 看到没有?就是你会发现它是反过来的嘛,对吧?它给我们的数刚好是反过来的。二二一一二一一嘛,其实刚好就是反过来的,知道吧? ok, 那 我们再讲一个练习三吧,就是,呃,带状态的,这个是特别接近我们那个七三五的那道题, 这也就是为什么会有这个知识点补充的一个原因。就是,呃,我们在讲这个的过程当中发现同学在后台试线,老师说,呃,不理解这个问题的原因就在这里。 那我们来看一下个数, d f 加一个状态,那也就是我们第一次升级 生成不超过 n 有 一和二,哎,组成的一个数,那要求的话就是什么?哎?至少出现一次二,对不对?这个数中的话至少出现过一次二。 那我们来看看这个呃,搜索数吧,好不好?我们这个是一个状态啊, 对吗?我们真的是一个状态,就是我们还是往左边去搜索,对不对?你 x 乘以十加一,对不对?然后你再加一变成十一,对不对?然后你再返回的时候再往这边,其实你就怎么样? 加了当前的一个节点嘛,十二嘛。啊?这个不叫十二,这个叫二,是一二,对不对?那你左边的话这边其实就走完了嘛,对不对?呃,就是同学们这个数还是要 要自己模拟一下,知道吧?然后的话我们来看一下,就是你会发现其实我们就是怎么样, 我们在 if 判断这边的时候,我们判断了当前的一个不等于零,同时的话这个 r 的 话, usr 它是被起用的一个状态,你会发现我们这个我们的这个状态的话,它会特别的像什么? 像我们之前的那个七五三那道题的,呃,缩写版,对不对?为什么呢?因为,呃,我们来看一下嘛。 那把这个擦掉,我们回到这边来,比如说我们零传递进来,对不对?那这个传递进来肯定是什么? 一般来说我们会个什么? force 嘛? f a o s e 对 不对?那你第一次传递进来的它肯定是等于零,但是你的这个 user 它不成立的嘛?所以这这这边的话,第一次见到它是不会怎么样?它是不会执行的,然后剩下扩展,对吧? 我们开始循环,循环的话我们怎么样?每一次,每循环一次,从里面拿出一个数,对不对?第一次的话,因为 column 第一次是零嘛?零乘以十加一是不得到了一啊, 只是 n x 等于一嘛,对不对?那 n x 如果说大于 n 的 话, n x 大 于,比如说大大于,我们大于三十吧,好吧,大于三十的话,它会跳出去嘛?对不对? 好的话我们开始怎么样? d 为将 e 传递进来,是不是?这个能理解吗?同学们,它此时我们的这个意味着还是什么?还是 force 吗?对不对?但你注意看哦,它这边 force 或者这个 d 等于等于二, 对不对?那也就是我们第一是 e, 进来的时候,这边是 e, 对 不对?这个同学们可以理解吗? 对吧?呃,我直接把这个代码啊,我们直接调试一下就好了,这样子的话你们会呃理解的比较好一点。 我们把 dfs 的 部分给拿掉吧,然后我们这边传递一个 force 进来, 然后的话我们先来测试一下吧,好吧,你们会发现他输出了多少?十二二二一二二,对不对?然后我们回到题目来看一下 先前所有不超过 n, 只由一和二组成的这个数,要求这个数的至少出现过一一次数字二,对不对?那我们这边直接打断点吧,好吗?我们这边直接打断点就好了, 三十,然后会撤。 ok, dfs 进来的时候,我们来看一下 此时可能的是驴 user 是 force 对 不对?所以第一行道它会不会直行?它不会直行的,它不会输出的。这也就是说我们在构造的时候,它不存在那个空的那个节点。那 ok, 好, 我们开始从一一和二我们开始构造。 注意,因为我我们这边限制了一一和二,所以的话,你会发现我们所有的组合只是一一和二组成,它不会出现,说, 比如说你那个二十三,它不会出现,对吧?虽然说我们的 n 是 三十,但是啊,我们在循环当中,呃,限制了它一和二,知道吗? 第一次进来 next 等于一对不对?达到它不会怎么样?大于 n, 我 们开始 d f s 对 不对? d f s, ok, 好, 来,我们开始进来,对不对?然后此处括号是是几?括号是一对不对?那 u 则是多少? use 还是 force 对 不对?所以它不会执行这一段,知道吧?因为你这个是逻辑语,但如果你把它改成或它的一就一定会输出, 知道吧?它的一就以,它的一就以一定会输出的, ok, 好, 那我们第二次的话就变成了十一,对不对? ok, 但你的 use 二还是什么? 还是 false, 对 不对?你的 user 还是 false, 所以 的话我们再接着走,注意看它的第九行还不会成立,然后再接着往下走,对不对?变成了一百一,一百一大于 n 的 话, ok, 好, 跳出,对不对?重新来。 这个时候我们的这个括号的话,继续,对不对?一百一十二,它每一次从这个 d 啊,从那个大括号里面我们拿出一个元数就跳出,对不对?这个时候我们怎么样开始返回了, 哎,我们开始返回了,注意拿到话, ok, 好, 再次开始,然后此时我们的 next 变成了几? next 是 不是变成了十二,对不对?到这时候注意你的 d 变成了几? d 也变成了二,对不对? 那我们回到这边,这个时候你的 u 则变成了真 call 的 也不为假,所以这个时候你会说出一个十二, 能明白吧?这个同学们最好的话还是就是,呃,自己能够打断点去跟踪一下,知道吧?这样子你才能够真正的去理解这个东西,然后我们把断点放开吧, 因为如如果说你只是看老师做这个,那你自己没有去做的话,你可能很难去理解这个东西, ok, 我 们接着往下讲吧。呃,下面的话就给题目四,题目四和题目五的话,呃,题目六,那就给同学们作为一个作业吧,好吗? 呃,题目十跟题目五还有题目六的话,呃,就作为一个作业吧,好不好?同学们可以把这个截屏一下,然后自己试着去去做下这个作业,看看能不能解出来,对吧?这个是题目五, 试着看看能不能解出来,那能解出来肯定是最好的,那如果解不出来的话也没有问题,知道吗?老师后面会呃讲解这个答案, 然后的话,呃,这节课的话,其实我们基本上到这边差不多就结束了,但是这边的话还是会有一个固定的一个流程模板。那老师的建议是,呃,记下的,就是说我们每到构造的 d f s 要求,通常来说 就是你画一棵树吗?你画的时候,然后你标注一下节点和状态,然后哪些节点是答案,哪些地方可以减值,然后这个时候的话我们才能够真正的去当你画出了这棵树,那我相信你在写这个代码的时候就比较轻松,也比较简单。 然后我们这节的话,注意我们现在做的这一套啊,就是本质是让你们知道 dfs 不 单单只是见图,也有不见图的 见图加不见图的组合起来我们称之为搜索。就像老师这在最开始所讲的,我们在一个有限的范围内, 我们搜索出他的不同答案,或者说我们搜出他的不同的解。我相信老师刚刚讲的这个你们还记得,因为我们在最开始讲变理解地位的时候,对吧?我们已经讲过这个, 那这节课的话我们到这边就结束了,我是汪老师,我们下一期再见。

hello, 各位同学,你们好,我是万老师,上一个视频当中呢,我们讲了一下那个七五三说对吧? 呃,七五三说的话,有同学就是在后台私信老师说,呃,老师,我对于这个你 dfs 的 这个调用不是很理解。呃, 其实这个是我们在构造啊,我应该怎么跟你讲呢?我打开一个翻译器吧, 就是我试着跟你讲一下,然后你看看你能不能理解,因为我们之前的话,我们在讲 dfs 的 时候,我们都是怎么样 都是见图,对不对?我们一般都是见图嘛,见图然后搜索嘛, 这个有一个好处,就是你们能够快速的理解 dfs, 深度优秀优先搜索,那缺点的话,就是现在就暴露了这是什么?就是你们呃,在把见不见图或者把它理解为一棵树的这个过程 啊,会有一些这个转换不过来,那我们来看一下,为此的话,老师还特地写了一个课间,那就是啊,这个有点嘲讽的意思啊, 那这是这个非常重要的,就是先直觉,再规则,然后我们再代码啊,再模拟,我们不要跳,也不要抽象,那也就不会再鸡飞狗跳。 那这边说的鸡飞狗跳呢?就是在这一段你们不理解的情况,就是说,哎,老师为什么要那开始乘以十再加三,对不对?包括五跟七,也是因为他这个相当于他带进来的这个场所状态。 那如果说这一段你还不是很理解,那没关系,我们先不管他,我们先不管他,先回到老师这边, 我们先确保一个,就是我们从图的一个 d f s 走向一个构造型的 d f s, 那 图的话是已经给定好的什么节点和边,但是我们构造的 d f s 的 话是要从最简单的自己去构造,对吧?这一点非常重要,同学们可以呃,拿纸根笔抄下来知道吧? 因为我们之前讲过巅峰式的话,我们不单单是图,我们之前讲过深度优先,搜索的话只是搜索的一种手段,搜索的话是一个非常大的一个框架,它可以见图也可以不见图,但它的本质是数。 我们之前在讲变类型题目的时候,其实我们已经做过很多次,对不对? 你可以把它把这个理解为什么起始点,起始点的话,如果说我按照先先左对不对?左的话,那我可以把它理解为或者是向下,对吧?这样子行不行?这样行不行 其实也是没有问题的。知道了。呃,为什么会有点转不过来的原因就是因为老师最开始讲的是便利型的规用矩阵,能够让你们很好的快速入门, 所以的话就是在这个转换的时候转换的构构造型的 d f s 的 时候可能你会有一点点就是不是很好的及时转换过来。然后的话 d f s, d f s 的 节点我们是可以构造出来的,具体表现在哪里?等一下,我们在 第二个这边我们会做一个实验,你就会明白了,这边的话就是你拿纸根笔记一下就好。 dfs 的 节点是可以构造出来的, 然后的话我们从你最熟悉的一个 dfs 开始, dfs 一定在图上跑嘛? 如果说我们在没有讲述的时候你会,我相信你会很快地回答我,诶,对的,它会有一个矩阵对不对? 通常来说我们把它称之为建一个图,但是你会发现我们在讲这个 dfs 的 时候,我们也会把这个图,你记得我们的第二章节我们有一个什么总数,对不对? 总数和一个完整数,对吧?其实你会发现我们整个矩阵如果走完的话,它其实就是一棵树, 对吧?为什么会到这边你会有点卡住的原因呢?因为在这个之前我们其实一直都是在见图,见图的最重要的目的也是给你打下一个好的基础。 所以的话,当我们在看到一道题用单调性的时候,我们不一定以我们,我们不一定要见图的,知道吧?我们是根据需要见图, 然后的话,这个迷宫里我们走了,对不对?在树上便利,其实我们也走了,网格的上下左右我们其实也走了,那老师这边总结一句话的话就是 d n f c 的 本质不是土,而是在一棵树上走到不能走为止, 能理解吗?你比如说我们右下左上,我们一个点、两个点,三个点、四个点,对吧?我们先换一个矩阵嘛?我不还是从你最熟悉的矩阵开始,这边走,这边走,这边走,这边他一直能走,我就一直走,对不对?知道什么 走到不能走为止?你比如说这边不能走了,这里不能走了,这里不能走了,他是不是要回头啊? 是不是?它是不是要回头?所以其实这也就是为什么我们说 d f s 的 本子啊,不是图,而是树。当然如果说你要说它是图的话也可以, 因为如果说你把这个举着画出来,或者又把整个所有的树画出来了,它其实也是一颗,这个也是一个土,对吧?所以的话,同学们有时候还是要记得我们之前所学的一个问题,知道了, ok, 那 我们引入的一个就是 d f s 的 问题,我们还是回到一个最简单的一个构造,我们给定一个整数 n, 用 d f s 生成,不超过 n 的 只有一和二组成的数值,例如 n 等于三十,注意数值大小是三十的时候,它不一定会循环三十次,同学们要注意啊, 它的 n 等于三十的时候,它不一定会循环三十次啊。因为在 dfs 内部搜索的时候,只要你的 x 大 于 n 的 时候,它就会直接累腾嘛, 我们就直接减掉了。知道了,那合法的话是一十一一二二二一二二,对不对?那你可能会好奇,哎,老师,那有没有别的呀?那没有别的,因为你再有别的话,它就超过三十了,知道吧? 这,这啊,这一句话要记住,就是我们输入的不是判断的数,而是自己生成构造的一个数, 你们尽量继承构造,而不是生成。首先的话我们来画这棵树,好吧,我们从零开始,对不对?从左边一对不对?一一, 左边走完的话回到右边一二,然后你整个左指数怎么样? 走完了,走二,对不对?二怎么样?走二一二一,再走几,再走二二,对不对?那你整个完整的就是一一一一二二二一二二,对不对? 那这个时候其实我们来思考一个问题,就是节点是什么?节点是我们当前构造出来的,这也就是为什么我们当时会有 x 乘以十,加上多少?它上了一对不对,其实我们可以加上 i, 知道吗? 我们应该是加 i, 能明白吗?这个是在构造我们当前的这个节点,当前的这个节点我把这个擦了, 能理解吗?这个是我们当前在构造的这个节点,那在末尾加一加二,也就是加它的一个下一位在这个位置, 所以的话这个时候我们再回答这个问题,我们是不是生成了一棵树,对不对?从目前来看,其实我们生成了一个什么 二叉树嘛?对不对?我们是生成了一个二叉树的,对吧?那 dfs 的 本质就是,比如说我们在做一个 题目,要求你做一个矩阵的时候,那你这个时候就需要箭头,但如果说题目不是让你求一个矩阵,或者说没给你个矩阵的话,那基本上我们不是在箭头,我们就没有箭头的一个必要了。 然后的话我们把刚刚的这个模拟,我们翻译成 d、 f、 s 代码,我们来看一下, 我们直接来读一下这个代码,别人这边是零的时候,对不对?那我们这样子把 x 等于零, n 等于三十,好不好?我们就用三十,我们就用上面的这个数据,我们就用上面的这个数据,我们来看一下,好吧? 这个时候同学们稍微看一下啊,第一次进来 x 等于零, x 不 会大于 n, 所以 的话它没有返回对不对?我们标一个叉是不是? 那 x 不 等于零对不对?那因为你 x 等于零的话,所以他这边不输出对吗?这边也不进来, 大家注意,你在这边进来这个 x 乘以十,也就等于说零乘以十的结果是多少?还是零再加一等于什么?等于零加一,所以此式 x 的 结果等于多少? 移?也就是说我们在第一次调用这边的时候, d f s 是 移移,看到没有,但因为你执行到这边的时候,它会调用 d f s, 所以 它跳到这里了, 此时 x 等于一,对不对?一不会大于 n, 所以 的话再次进来的时候它又叉掉了,它不进来,所以的话,老师这边点一个叉的原因在哪里?就是在这里知道了, 然后的话,我们当进入到这边的时候,一不等于零,条件满足,所以我们这边打一个勾进来,这边输出了一个,一,看到没有? 同事们应该能理解吧?然后当我们第二次进了这个 d f s 的 时候,注意你变成了什么? x 由原来的零变成了一乘一 十,对不对?等于为什么十加一,所以此时的 x 变成了几,变成了十一,看到没有?那 ok, 好, 第二次进来的时候,它这里变成了十一,这边它好给你打一个点, 变成了十一,它在从这边走的时候拿的话,我们这边变成了十一,注意十一的话它不会大于 n, 因为 n 是 三十,所以的话我们这边擦掉 十一对不对?我们进来十一不等于零, ok, 这边输出了十一,对不对? 这次同学们注意了,然后的话我们这边执行完之后,我们再接着往下来执行,我们等于第三次进来此处,什么十一乘以多少?十等于一百一加一,还开始指着等于幺幺幺对不对? 这些同学们能理解吗?幺幺幺的时候,第四次进来的时候怎么样?要返回了对不对?因为你的 x 大 于三十了,你以为你的一百一 大于三十了,同学们能理解吗?所以的话它就锐腾返回掉了。返回掉第几层?返回到第三层的这边,看到没有 毛的话,我们此时的数应该是一一一,对不对? ok, 好, 那我们回到数这边来看一下,现在老师把这个之前的叉掉, 你看看它的左指数是不是从一开始到一一,然后再看看我们是不是到一一就结束了,到这边就结束了,等于说我们这个左指数,左指数的左半边等于说我们这个左半边我们走完了,看到没有? 是不是? ok, 然后的话它返回,返回到这个位置,对不对?这个能理解吗? 拿的话我们我们走哪边?我们是不是开始走这个走这边了,对不对?拿的话返回能理解吗? 我们回到这棵树这边嘛?是不是?我们返返回到上一层,对吧?返回到上一层的话,然后我们怎么样?只需下面的这一边左加二的这一条,对吧?然后的话注意看是不是变成了一二, 然后我们这边的话其实跟这边是一样的一个走的路径,然后等这边走完的时候呢? ok, 好, 我们开始走哪里走这边了, 然后一直的话去重复我们刚刚的那个呃步骤。所以如果说同学们,就是我们在上节课讲那个代码的时候,你不是很理解,那老师的建议就是你还是要手动的去模拟一遍 这个代码,你才能够真正真正的去理解这个过程。知道了,然后我们这边会有一个对照,你比如说啊,其实这个对照就是老师刚刚走的那个过程,走到左指数对不对?然后这边走什么?走到右指数 以一百一的时候给大于?摁,然后减掉整颗指数就不再走了,因为再走的话就没有意义了。 x 不 等于零,然后我们就说出知道了, 然后重点的话,我们讲一下这个访问的这个顺序把,同学们也可以自己先看一下啊。把,同学们也可以自己先看一下 我们输出的顺序,呃,还是要看一下,对吧?虽然说老师这边写了一个 嘲讽的一个,哈哈哈哈,那其实我我相信你们能学到 d f s 的 时候,其实你们应该是能够还是学得比较好的,对吧? 我们来看一下这个啊,执行的一个顺序,其实跟老师的那个刚刚是一样,知道吗?你看这个 我们走到一百一的时候,对不对?走到一百一的时候我们走到哪里?那我们让它擦掉了,对不对?其实这边衔接的是哪里啊?这一边一百一,累腾之后嘛,对不对? 我们 x 等于一一一的时候,它不是累退了吗?对不对?累退,它返回之后,它返回的是这个第三层,这边你第三层执行了,然后你要往下执行嘛?对,因为它返回了嘛,所以往下执行,等于说是一一呃, 一零,你乘以什么啊?一一零加上二等于一一二嘛,对吧? 然后一一二嘛?然后因为你这边你一一二,你传递进来 x 等于一一二的时候,你也大于它的时候,对不对?它也会返回嘛? 是不是它也就返回了嘛?能理解吧? ok, 然后它返回之后的话,然后它要走怎么走?它的一个什么右边嘛?它的右边是不是在这里一二呀? 对不对? ok, 其实这个同学们可以呃,可以看一下,其实会发现我们整个的这个 dfs 过程其实跟老师刚刚手动的模拟还是一样的,那最终的这个顺序的这个输出的话 就是一一一二,我相信啊,通过刚刚的这个模拟跟这个讲解,你们应该是会理解的比较好,对吧? 那我们来看一下,就是这边要记得我们的一个记忆,这边要记住的一句是 dfs 输出的是顺序,不是数值的大小,知道吗?和这个搜索的顺序呢?我们跟图来 对比一下吧,帮助你们能够更好地去理解一下。在土的话,我们一般会去啊建立这个节点格子,对吧?这个是我们在使用土的时候,那构造型的 dfs 的 话是我们自己生成, 其实如果说你之前有认真听老师讲的构造的话,那这个你就会比较理解,知道构造的话等于说节点是我们需要我们自己呃,给写就是给构造出来,那我建议的话就是你把这个写一下,知道你们可以把视频暂停一下,然后写一下 啊。以前我们在图的话,我们是在图上走,但现在我们在构构造 dfs 的 时候,我们是在规则生成树上走啊。那我们来一个巩固练习吧,好吗?后面的话我们会有一些题目,同学们需要自己做一下,得到了 课堂小练习,呃,巩固一下吧,魔丸好吗?嗯,巩固一下,同学们可以先看题,拿的话把这个 d f s 给数给写出来,好吗? 我们可以看一下 n 等于十五的话,那我们是不是要先判断什么? x 如果大于 n, 我 们怎么样?每顿对不对? 美特拿到我们怎么样? d f s 对 不对? 是不是怎么样?但其实你,你,哦,你在前面需要干什么?你上课需要 x 乘以十加一啊,对不对? 这个同志们可以理解吗?其实这道题的话跟我们上面的这个这道题是一模一样的呀,对吧?其实你只需要把什么把这个数给画出来就好了,那我们来把这个数画一下吧。 以前话说的话就不会有问题,比如说这个是驴对不对?这个是什么?一一一对不对?这个能能能理解吗?同志们是不是一嘛一嘛?然后的话他这个手,呃,你要注意一个问题啊, 就是当我们在画这个树的时候,呃,你比如说我们在这边放一二,对不对?这边放二的时候是不是?那你到这边的话,其实我们整个的为什么下面没有啊? 因为你下面就就抄了嘛,对不对?呃,能理解我在说什么。同学们,你比如说我们从这边开始的时候,对不对?我们你可以把这个代码其实我们套过了, 对吗?我们其实可以把这个套过了。呃,嗯,可我们是你直接把这个往下拉就好了。 你比如说我们 d f s 把,我们把 x 对 不对?乘以十 加上一对不对?因为你最开始 x 等于多少? x 等于零嘛?所以的话第一次你这边是零加一,你得到了这个点嘛,对不对?然后的话你第二次因为你是零加一,你得到了这个点嘛,对不对?然后的话你第二次因为你是多少?你的 x 变成了一, 对不对?你第二次的时候 d f s 一 乘以十加一变成了十一嘛,对不对? 然后你再往下走,你是不是就走完掉了呀?你第三次就要被减掉了,你第三次十一,乘以十的话,加一的话,你超过十五了呀,大于多少?大于十五了呀,所以的话,你下面是会被减掉的呀, 对不对?所以你返回,返回到哪里?返回到上一层,是不是?你返回到这一层,对不对?这可能理解吧?然后你返回到这一层的时候,然后因为你在往下直行,对吧? 再往下执行,你就变成了十二嘛,对不对?然后你十二的话,到后面十二,乘以十加一的时候,那你就变成一百二十一了呀, 一百二十一你也就返回掉了,是不是你就要往再往上走了呀?这个同学们应该能理解吧? 就是因为今天可能讲的比较多,所以如果说你,你感觉,哎,老师应答的这个草稿我好像不是很理解,那就说明刚刚老师在讲这个代码的时候, 讲这个代码跟讲这个代码和话,刚刚那个数的时候,你没有认真听,你没有模拟,包括说老师在讲这边的时候, 你也没有模拟,知道吧?所以的话,你就是老是在这边讲这个练习,画这个数的时候,呃,你会觉得就是你,你,你不知道老子在讲什么的原因就是在这里,就是你前面没有认真听, ok, 那 第一个练习我们就讲完了,那第二个练习的话,其实我们就是反过来了,知道 第二个,第二个连引线,我们车就反过来了,你看嘛,它只是把顺序改变了,对不对?那你比如说啊, x 等于零, n 等于十五,对不对? 那你最开始是多少?你这边的话是零乘以十加二,那也就是二嘛,对不对?那你的第一个一定是二出来,你这边是零,那你这边就是二,二的话,你这边就没有了, 同学们,就没有了。为什么?因为你到第一层的时候,你是二的时候,在这边的时候,你会怎么?你会变成二乘以十,再加就变成二十二了,你二十二到于十五,所以你这边就直接就返回掉了,你就开始走,走这边了,知道吧? 能,能,能,明白老师在讲什么吗?所以你这边的话是二一,能明白吗? 它调换了它的一个顺序,哎,同学们可以,其实,呃,把那个用代码验证一下,其实就就会发现老师讲的是是什么,知道吗? 然后, ok, 我 们来看看我们这节我们讲的哪些内容,就是你一定要理解我们今天做的是构造 dfs, 知道吗?我们做的是构造 dfs, 不是 图, 那就是我,其实我们一直在在就是构造生成,就是某个数字,就是必须的某个数字,对不对?那为什么? 呃,到哪里,到这边的时候我们会带一种状态呢?这个状态的原因是表示,呃,我哪一些是已经 ok 的, 哪些是还不 ok 的, 知道吧?哎,你就比如说你有三盏灯,你有三盏灯,对不对?那你可能说有些灯开了,有些灯关了,或者是全关,或者全开,它表示的就是一种状态,知道吧?那我们来 总结一下吧。好吧,我们来总结一下,那我们现在讲的这一步的话,它不是技巧课,它是从 dfs 的 服务,它就是往构造这方面走,当你能够清楚地理解到老师讲的是构造的时候,那其实搜索 你就基本上掌握了。那如果说这节课你听懂了的话,那再接下来老师再做几个这个,跟这这边我们会有几个这个课后练习, 然后的话就是你们会很好地去理解,那这节课的话我们到这边就结束了,我们下一期再见。

record, record 就实际上是回忆,回复思考的意思,那什么意思呢?嗯?你有没有发现啊,现在写得好的课本一般在讲了一个章节之后的课本以后啊,有一个大概的复习的小节,总结一下这一张讲什么内容,甚至还给你一个习题,对不对?这是非常符合心理学的原因。 你不应该一下子把整本书读完。看完一张之后,你可以返回去一下, 思考一下,回忆一下你能够想起多少东西,而不是急乎乎的跳到下一张。所以那些课本是这么安排的,在每一张之后有张街的小节。 但是你读别的书,他并不一定有一个章节的小节,你自己给你总结。喂,你不看到下一张之前,先跳回去看一下这一张到底有什么内容,你自己想一想。哎,我能不能记住这张内容就是 到底讲什么东西啊?我能不能讲这个所谓啊?不行,回去就看一下这个微阔的过程,这个回速的过程能够大大的提升机, 而且这一点就相当于把一个整本书一个这么大的东西切成了小块,每一个小块你都回溯了一下。 整体而言,你回宿的时间可以花的非常少,比如说你看一个章节可能花了两个小时,但是你回宿的时间都超不过两分钟,但这个两分钟可能会对你的记忆产生深远的影响,你发现你记得比别人好多了, 其实你没多花时间,这比你看完整本书过了一两个月以后再去复读要容易的多,节省时间机效果更好。

下面我们还有几个片段需要添加,但是这次呢,我们需要用相似的是不同的方式进行添加。法芬奇添加片段呢,是一个三点编辑, 在时间线上面,第一是添加入点,第二添加一个出点,点刻结键 o 键选中了一个范围,选中范围之后呢,我们之前是只添加了一个入点来选择片段的起始范围, 然后进行拖拽的。下面呢,我们原画面当中只添加出点,而不用去 设置入点的一个方式,叫做回速编辑。之前我们添加的片段都是先在时间线上面添加一个入点,然后再添加一个出点。选择范围之后呢,在片段上面,呃,只选择一个入点,然后 出点让这边自动选择。现在呢,我们同样的在时间线上面添加入点和出点,但是呢,我们在片段上面是选择出点起点,根据我们选择的范围让它自动选择。 之前是入点重合,现在是出点重合的一个方式,叫做尾数编辑,希望大家可以跟着做起来,谢谢!喜欢的话给个关注吧,欢迎点赞收藏,转发关注!

在上期视频中呢,我们讲完了新建工程相关的所有内容,那么本期视频呢,我们将学习如何设置工程的自动保存, 防止因为停电,工程崩溃等等的原因导致你辛辛苦苦做的工程意外丢失。哈喽大家好,我是小文。本期视频呢是 cakewalk 桑拿全面教程企划的第三期,如果本视频有解决您在 cakewalk 桑拿使用过程中的任何疑惑的话,可以一键三连加关注,支持一下小文哦。 好,那我们现在呢就来打开一个工程来设置一下自动保存。首先呢,我们点开上方的菜单栏中的编辑参数,设置在弹出的设置窗口的下方呢,点击这个高级, 如果你们看不到最下方的这些按钮的话,应该是屏幕缩放比例出现了问题,可以百度搜索一下 windows 屏幕缩放比例调整方法,把比例调到百分之百或以下即可。然后呢,我们回到缩纳中就可以看到这个高级选项了,接着我们在左侧找到文件下面的高级, 就可以在上方设置自动保存的时间间隔和步骤间隔。那么这边我建议呢,一般情况下,我们不要把这个间隔设置的过小, 过小的时间间隔可能会给 cpu 带来过大压力,可能会增加工程崩溃的风险。那我这边推荐设置呢是五到十五分钟,五十至一百步,大家可以按照自己的需求以及电脑配置的高低,在这个范围内进行一个设置。 然后在下方呢,我们给这个起用工程文件版本编号给他打上勾,并且将需保留的版本号设置在十到三十之间, 这样呢,可以方便我们回溯更早以前手动保存的工程版本。那么在设置完成之后呢,我们点击右下方的应用,再点击关闭即可。不过这里呢,我还是需要提醒大家一点,就工程自动保存它是一个保命技能,它无法让你规避所有的致命攻击。 所以这里呢,我还是建议大家多多的手动点击保存工程,也就是左上角的文件保存,或者也可以直接使用快捷键 ctrl 加 s 来进行保存。好,那现在呢,假设我们的缩纳工程突然崩溃了,一般情况下它可能会弹出一个这样的窗口, 我们选择是然后关闭即可。这么一来呢,他就可以在你这工程崩溃之后,再去自动的保存一个最后一个版本的工程文件。那这个功能呢,我个人认为啊,是 solo 相比较其他一些主流宿主做的比较好的地方, 他可以在你经历了一些致命攻击后,仍然给你一个额外的存档机会,方便你存档不用完全重开。那现在呢,我们已经经历了工程崩溃,我们需要通过自动保存来找回这个工程。在这里呢,我们就可以点击上方菜单栏中的文件 提示页面,然后点开本地工程,就 local projects, 选择我们新建工程时保存工程的文件夹,然后把 recent 切换为 o, 就 可以看到这个自动保存的工程了。在这边呢,我们也可以看到它这个保存时间,确认无误后,双击打开即可, 打开后记得及时再次保存好,防止是因为工程中的某个第三方插件出错,再次导致工程崩溃。 那么如果说我们的工程没有崩溃,我们只是想要回溯一下过去我们手动保存的某个版本,那我们可以直接在左上角文件恢复,找到我们想要回溯的版本。在这边我们都是能够看到保存的日期时间的,选择其中一个后点击确定, 随后呢,他可能会根据你是否设置了每次开始时都打开启事页面,弹出一个启事页面的窗口,如果说有的话,我们直接右上角关闭启事页面,随后他就会自动的去加载我们回溯的版本。那除此以外呢? so 呢,还有一个回溯的方法,可以在我们没有打开工程时去回溯, 就是找到我们工程新建时所设置的那个保存文件夹,在里面呢,我们可以看到 c w p 格式的文件,文件后缀呢是保存的时间日期, 这边我们需要将其重命名,并且将后缀改为点 c w p, 然后回车它就会变成一个 cakewalk, 可以 直接打开工程,或者说我们不用重命名,直接右键选择打开方式找到 cakewalk sola, 这样子也是可以直接打开这个工程的。 ok, 那 本期视频呢,就是以上这些内容了,如果你感觉这期视频对你有帮助的话,可以给我一键三连加关注。同时如果你想要更好的支持我把这个系列做下去的话,可以使用大会员每月免费领取的 b b 券,为我充个免费的电哦。好,那今天就到这,咱们下期视频见,拜拜。