竞赛
考级
结课最后一题这么简单¿ 最重要的是,输出的是“再见,世界”¿¿¿
#include<bits/stdc++.h> using namespace std; int main(){ int dx[8]={-1,1,0,0,-1,1,-1,1},dy[8]={0,0,-1,1,-1,-1,1,1}; } /* 中心:x ,y; 上: x-1,y; 下: x+1,y; 左: x ,y-1; 右: x ,y+1 左上:x-1,y-1; 左下:x+1,y-1; 右上:x-1,y+1; 右下:x+1,y+1; /*
招人啦~~~ 我和“极客网咖(可互关)”的小伙伴都在ACGO等你,快用这个专属链接加入我们吧!https://www.acgo.cn/application/1956238107838242816 声明 本团极客网咖主玩和平,王者,三角洲,mc等 若入团申请被拒绝,可联系༺ཌༀཉི༒澜༒ༀད༻ 想改分组也可以联系管理员 请入团成员尽量改名为极客_XXX_XXX的形式 点个赞吧!!! 点个赞吧!!! 点个赞吧!!! 前五个人给管理员 扮酷扮酷扮酷 要打的私信我或者管理员 合作公司 : 极客电竞 段位系统: 王者部 :国服>省标>市标>区标 和平部 :经典模式 【无敌战神 > 王牌 > 皇冠 > 钻石 】 地铁逃生 【地铁大亨 > 大目标 > 中目标 > 小目标 】 (骂人,冒充管理员违反规定会进小黑屋) 监狱系统 一级知章>二级知章>三级知章 一级知章=死罪 二级知章=大罪 三级知章=小罪 竞赛规则 禁止使用ai不可一个人用多个账号参赛,违者看情况处罚(最低二级知章)!!! 不可交换代码使用,违者进入二级知章!!! 附:发文章/公告栏技巧 -> 反转字符 邀请链接https://www.acgo.cn/application/1956238107838242816 欢迎各位成员多多招人!!! 欢迎各位成员多多招人!!!
https://www.acgo.cn/application/1942941440919638016(谢谢你们,😘)
666
123
234
这里是CML团队的学术讨论贴,非团员请勿进入。 这里是团队建议想与举报箱,团员请勿在这里发水贴,违者团队法律处置
这里是CML团队的学术讨论贴,非团员请勿进入。 团员请勿在这里发水贴,违者团队法律处置
团队招人啦!!! 如果想进我们团队的先空降https://www.acgo.cn/application/1941707591331131392 就是我们团队了,想进团就可以找团长,团长有很大几率会同意的! 再通过审核就可以进团啦! 进团需求: 1.你会c++ 2.不要求年龄,成年未成年都可以进团! 3.进团了要遵守团队的团规! 做到以上几点就可以进团了!!!我们在团里等着你
功能很多,不用下载,平时做题画图用很好 网址:https://excalidraw.com
2025年最后一期集中营回家时间の传送门 换源版
第三章:猩红猎杀 猩红十字的烙印仿佛点燃了空气!林薇身体的本能超越思考,猛地向右侧扑倒! “嗤——轰!” 一道蓝白炽热的能量束撕裂她刚才站立的空间,狠狠轰在身后的维生舱上。强化玻璃应声爆裂,粘稠的蓝绿色营养液如同溃堤洪流,裹挟着玻璃碎片和维生舱内那具插满管线、苍白浮肿的躯体,轰然倾泻!刺鼻的防腐剂混合着某种有机溶剂的气息瞬间弥漫,被淋湿的防护服发出“滋滋”轻响,皮肤传来灼烧般的刺通! 林薇在湿滑的地面翻滚,后背重重撞在另一个冰凉的维生舱底座上,剧痛让她眼前发黑。烟尘中,那只猩红电子眼冷酷地调整着焦距,锁定她的新位置。沉重的金属脚步声踏碎地上的玻璃残渣和粘液,如同死神的倒计时。 没有犹豫的余地!林薇反手拔出大腿绑带上的脉冲干扰器,对准烟尘中那个高大轮廓的红眼位置,狠狠扣下扳机! “嗞——嗡!” 刺耳到令人牙酸的电磁爆鸣瞬间充斥整个巨大空间!顶灯疯狂闪烁,明灭不定,周围维生舱的监控屏幕瞬间被雪花纹吞噬,发出“噼啪”声。那只猩红电子眼的光芒剧烈摇曳、涣散,仿佛被强光刺伤的野兽! 就是现在!林薇强忍剧痛和眩晕,手脚并用地扑向环形控制台!控制台巨大的悬浮屏幕上,血红警告【“苍鹰”单位已突破声波抑制屏障】依旧刺眼,但旁边一个较小的数据窗口正在急速刷新!她的手指带着残影在虚拟键盘上敲击,强行切入后台日志检索——她必须知道“回声序列γ”是什么!为什么是她?! 一行行加密数据被暴力破解,瀑布般刷下。林薇的瞳孔骤然收缩! 72号原型体! 屏幕右上角,她的生物识别模型下方,一行小字清晰标注着:【访客身份:72号原型体 (次级操作员 - 临时授权)】。 冰冷的事实如重锤砸下:她不是林薇,她是林薇的复制品,一个失败的实验体!所谓的“清理任务”,是“原型”要彻底抹杀她这个“污染源”存在的最后痕迹! 那空悬的神经接口头盔,不是给“织梦者”的,是给她准备的回收站! 目录
第一章 第二章 第三章
踏入第七新区庞大的地下综合管网时,冷冽的空气让她打了个寒噤。巨大管道的金属内壁上凝结着水珠,规律的嗡鸣声不知来自何处。 通道尽头是一部古老的货运电梯,内部没有任何标识和控制面板。当她踏入的瞬间,电梯无声启动,开始急速下沉。视觉界面上的环境参数快速变化:温度下降,湿度上升,辐射指标却维持在一个诡异的低位。 电梯厢的轻微震动停止了。 门外,金属通道向无尽深处延伸,通道两侧均匀排列着长条形光带,洒下冷硬的白色光芒。空气中那种低频的嗡鸣,此刻像巨大的心脏跳动,震得她胸腔发闷。 通道尽头并非想象中的核心数据大厅。 两扇足有半米厚的弧面合金大门矗立在那里。林薇将密银块取出,嵌入凹槽。一阵微弱的、令人心悸的震动通过合金门传递到她的掌心。那感觉像是巨兽的食道在吞咽。 厚重合金门向两侧滑开,毫无声响。瞬间,更强烈也更冰冷的光芒如同实质的洪流,猛地倾泻而出。 即使隔着防护服的密封过滤层,浓重的福尔马林与消毒药水的凛冽气息仍然蛮横地钻进鼻腔,辛辣得几乎让人窒息。 门后景象,即使是她,这位长期游走于数据死亡边缘的"无影者",也感到一股冰冷的寒意从尾椎骨瞬间冻结到了头顶。 空间巨大得超出想象。视线所及,不是复杂精密的服务器阵列,而是...一排排,一列列,如同惨白森林的金属枝干,是庞大的圆柱形生物维生舱。数目成百上千,在幽冷的白光下排列成整齐的巨大矩阵。 每一个维生舱内,都悬浮着一具苍白的人体。面容模糊在面罩和连接的管线之后,赤裸的身躯被浸泡得微微浮肿,皮肤呈现出一种不健康的灰白色。如同怪诞标本。 她的目光无意识地扫过这沉默的尸骸矩阵,最终定格在矩阵最前方。 那里没有排列整齐的维生舱。只有一部异常巨大、结构繁复的独立维生设备,如同这死亡森林的王座,被无数粗壮的管线束与复杂接口簇拥着。设备前方,一个与座椅相连的黑色头盔正微微发出幽光。 头盔此刻空着。 林薇僵硬地扭动脖颈,视线挪向离巨大维生装置一步之遥的环形操控台。巨大悬浮屏幕上繁杂的数据流瀑布般滑落。其中一个较小的分屏窗口异常醒目,刺目的血红色边框裹挟着中间一行冰冷的警告文字: 屏息凝视着血红警告的同时,她眼角的余光死死钉在控制台中央。那里,正投射着一个微缩的全息生物识别模型——正是她刚刚在门口"验证"通过的生物模版。 自己那张被精确复制的脸,此刻正以冰冷的数字形式浮在那里,顶着"织梦者"的名号。 "嘀——"一声刺耳至极的短促蜂鸣,毫无征兆地从空间某个看不见的角落锐利地刺出! "轰隆!!!" 惊天动地的巨响在实验室的死寂中悍然炸开!金属被暴力撕裂的尖啸、沉重的合金碎片高速撞击墙壁的轰鸣、能量瞬间爆发产生的冲击波... 林薇只觉得一股无形的力量狠狠撞在胸口,像被高速行驶的机车正面冲撞。身体不受控制地失去平衡,猛地向后踉跄摔去。后背重重撞在一个冰冷坚硬的维生舱外罩上。 弥漫开的呛人烟尘中,靠近那部巨大维生王座旁侧的厚实合金闸门,出现了一个触目惊心的不规则恐怖窟窿。 一只冰冷的"眼睛"正从烟尘和高温扭曲的空气后面浮现。 一只猩红色的电子义眼,发出穿透烟尘的红光。它的聚焦锁定机构精密而高效,内部多层光圈快速转动,扫描仪特有的微弱"滋滋"声在死寂和警报声间显得异常清晰、瘆人。 猩红的十字瞄准线,毫无阻滞地穿透弥散的烟尘,最终,死死地烙印在林薇苍白、仍带着剧痛余韵的脸上。
第一章: 霓虹与全息广告交织成的雨幕,淅淅沥沥地浇在"泽川"城的巨大合金骨骼上。空气中悬浮着微尘大小的纳米监视器,如同电子蜉蝣,无声地记录着这座超级都市的每一次呼吸、每一次悸动。 林薇拉紧了自己银灰色防护服的立领,帽檐压得很低,步履匆匆地穿过第七新区的步行街。街上的行人大多戴着款式各异的面具或面纱,只露出一双双警惕又疲惫的眼睛。在这里,"脸"是奢侈品,也是风险。 她的目的地是一间名为"幽影"的地下酒吧。这里没有招牌,入口隐藏在旧式垃圾处理通道的侧壁内。酒吧内部光线晦暗,空气混合着劣质合成酒精与金属锈蚀的气息。 林薇径直走向最深处的一个包间。里面已经坐了一个人,同样裹在宽大的深灰色长袍里,兜帽遮住了大半张脸,只能看到紧绷的下颌线条。 "薇小姐?"一个刻意改变过的低沉电子音响起。 林薇点点头,在他对面坐下,启动了包间自带的信号屏蔽场。"代号'织梦者'?" "是我。"对方确认。"我需要彻底消失。立刻。不惜一切代价。" 一个全息投影在两人之间的桌上展开,上面密密麻麻列满了需要清除的痕迹清单。项目数量之多,复杂程度之高,让林薇瞳孔微缩。这不是一个普通人能留下的。 "难度A+级。"林薇的声音很平静,但内心已经拉响了警报。"预付50%订金,基础价码200万通用信用点。事成后结清尾款,只接受离线密银块交易。" "可以。"对方没有犹豫,抬手,一个黑色合金小方块顺着桌面滑到林薇面前。"预付金,120万。包含特殊工具的租赁费。'密钥'在里面,只读一次,有效期12小时。目标是'深空回响'节点阵列核心数据块里的特定回声序列。全部清除。" 林薇不动声色地收下密银块,指尖感受到那冰冷的金属质感。"深空回响"节点阵列...那是城市级别的数据基础设施,其核心相当于泽川城"互联社会"的大脑,安全等级是地狱级的。 "风险极大。" "所以是你的价码。"对方的声音透过变声器依然透出一丝焦灼。"时间紧迫,有人在追我。我必须在48小时内完成所有清理。完成后,我的'遗泽'——一个未在清单上的私人加密库坐标会给你。里面的价值,远超尾款。" 林薇沉默了几秒。高风险,高回报,以及一个可能存在的陷阱。 "成交。"林薇伸出戴着纳米手套的手,一枚特制的生物密匙芯片嵌入她的指甲下方,微微刺痛。"任务开始。" 目录
铭记历史,珍视和平,开创未来 2025年8月15日,日本宣布无条件投降整整八十周年。这不仅是历史的回望,更是民族记忆的凝固与世界和平的见证。八十年前,无数先烈以血肉之躯捍卫了国家的尊严与人民的自由,他们用牺牲换来了今日的安宁与发展。 今天,我们缅怀先辈,向所有为正义而奋斗的人们致以最崇高的敬意。我们坚信,唯有坚持创新、协作与共赢,才能让和平之花在世界长久绽放。ZDZL将继续秉持责任与担当,汇聚技术与智慧的力量,守护和平,推动未来。 Remembering History, Cherishing Peace, Building the Future August 15, 2025, marks the 80th anniversary of Japan’s unconditional surrender. This day is more than a remembrance of the past—it is a preserved national memory and a testament to the hard-won peace of the world. Eighty years ago, countless heroes defended the dignity of our nation and the freedom of its people, trading their lives for the peace and progress we enjoy today. Today, we honor their sacrifices and extend our highest respect to all who have fought for justice. We believe that only through innovation, collaboration, and shared prosperity can the flower of peace continue to bloom across the world. ZDZL remains committed to responsibility and vision, harnessing the power of technology and wisdom to safeguard peace and shape the future. 歴史を刻み、平和を守り、未来を創る 2025年8月15日、日本が無条件降伏を宣言してから80周年を迎えます。この日は、単なる歴史の記憶ではなく、民族の記憶であり、世界の平和がいかに得られたかを証明する日です。80年前、数え切れない先人たちが国の尊厳と人々の自由を守るために立ち上がり、その命を捧げて今日の安定と発展を築きました。 私たちは彼らの犠牲を偲び、正義のために戦ったすべての人々に最大限の敬意を表します。そして、革新・協力・共栄によってこそ、平和の花は世界に咲き続けると信じています。ZDZLは責任と使命感を持ち、技術と知恵の力を結集し、平和を守り、未来を切り拓きます。
关于动态规划的全面讲解 Khalil Fong的动态规划讲解 前言———————————————————————动态规划(Dynamic Programming) 从它诞生以来 就一直是一个C++中的核心算法 但因其的难度性劝退了众多的码农 动态规划不是以其的数学推算或是程序编写能力出众 而是它就像是一种从思维演算到题目建模的一类编程算法. 这篇文章以动态规划出发 向各位解释其DP的本质 运用范围 核心特点 and 解题方法&思路 向各位提供超详细的动态规划解析. 1.基础动态规划 动态规划的核心特点便是将一个大问题拆解成多个小问题 这些问题在逐步解决的同时不断地记录下来 这样就提高了解题效率 这两种方法便是动态规划中的划分子问题和记忆化搜索. 动态规划可以解决的问题多是像这两类: 1) 子问题重叠: 在划分完子问题后 发现有一些问题在递归时会出现步骤 or 答案重复计算的问题 这样做会使得时间和空间有一定浪费 可能单个子问题发生不是大事 但多个子问题发生此事可能会超时或超空间. 2) 最优子结构: 这类问题是以一个个子问题达到最优解 从而使全局都达到最优解 简单来说 就是让每一个局部问题都竭尽所能的达到最好 从而使全局都达到最好. 动态规划的核心 动态规划以子问题重叠 最优子结构 最优原理和无后效性闻名 前两个已经说过了 我们来讲一讲后面两个最优原理和无后效性的核心概念是由美国数学家 理查德·贝尔曼(Richard Bellman) 所提出的 他在20世纪50年代系统地发展了动态规划这一数学优化方法,并首次明确提出了最优化原理(Principle of Optimality)以及无后效性(Markovian property)的概念. 无后效性指在某个阶段(例如dpidp_idpi 被确定已经有某个权值)被确定有着一个状态时 其阶段的状态就不会在改变了 也不会影响的后面的决策 只与现在的决策有关 也就是过去的事件不会影响未来 只与目前有关联. 最优原理指在每一个子问题中都达到最优的效果 从而使全局达到最好 最优性原理是动态规划里最重要的一块基石. 附 如何解决动态规划 解决动态规划这类的问题需要分多个步骤 思想如下: STEP 1:确定LEVEL AND STEP(层级和步骤) 以题目为准 我们把一个题目转换成多个子问题 又将一个子问题转换成多个子子问题 如俄罗斯套娃一般的细分下去 每一个需要解决的问题就是一种层级 对于每个DP问题来说 我们第一步要干的就是将一个大问题拆成多个小问题 在逐步解决每个局部问题 同时 我们还需要找到一个变量 能够把所有的小问题都串联在一起 在刚刚的斐波那契数列中 斐波那契数列的项数就是变量 它连接了每一个子问题. STEP 2:找到状态转移方程 在划分完子问题后 我们要想一想一件事情 就是如何将所有的子问题给串联起来 我们得到了很多子问题 也得到了我们需要的变量 接下来就是使用变量 将子问题都串联到一起 我们需要使用一句代码完成这件事情 那这时 状态转移方程就派上用场了. (我们可以提前列出一个公式 以其为中心编写核心程序). 状态转移方程和子问题及变量都密不可分 所以 我们在编写状态转移方程时需要多用上变量改变子问题 最好包括到所有的变量 以便为后面的程序提供更多可能. STEP 3:处理边界问题 在找到状态转移方程后 我们的思路构建已经完成一大半了 但一些边界问题我们还是需要处理一下 比如说斐波那契数列中的初始化问题 F(0)=0F(0) = 0F(0)=0和F(1)=1F(1) = 1F(1)=1这样的边界值处理 虽然这是一件极小的事情 但在这类地方犯错误就会引起蝴蝶效应 导致后面的值一错再错 so这样的问题一定要处理好. 2.问题实践 2.1.斐波那契数列: 斐波那契数列是动态规划中最简单的一件问题也是最经典的一件问题 原问题看斐波那契数列 看完后 我们可以知道 斐波那契数列的数值为1 1 2 3 5 8 ...... 它的递推方法我们也可以看出 就是第n个值=第n - 1个值+第n - 2个值 除此之外 它的第0个值=0 第1个值=1 在此我们列出它的公式: F(0)=0(1)F (0) = 0\tag{1} F(0)=0(1) F(1)=1(2)F(1) = 1 \tag{2} F(1)=1(2) F(N)=F(N−1)+F(N−2)N≥2(3)F(N) = F(N - 1) + F(N - 2)\tag{3} \\ N \geq 2 F(N)=F(N−1)+F(N−2)N≥2(3) (像不像一架飞机👍👍👍) 注意 在这里 我们处理了边界问题 避免了答案出错. 观看代码 在这里 我们将代码搬上来: 代码讲解 在这段程序中的核心代码如下: 中间的一行代码就是我们最最最主要的代码 我们将其称之为状态转移方程 它可以说是这道题之中最关键的代码 但它的组成便是建立在递推和记忆化搜索之上 我们只要以最优子结构方式 一步一步的去进行推算 最后再得到答案 这种代码的生成 便是很好体现了动态规划的主题思想 其以非常简洁的方式将其写出. 所以 动态规划以记忆和重新使用的方式 大大提高了代码的时间效率 以至于不让代码时间超时 这便是拿空间换时间的精确体现. 动态规划是一种典型的拿空间换时间的思想(毕竟现在的社会 时间成本比空间成本高太多了)————————此话引自Macw07老师一文讲清动态规划的本质中的感叹 代码的启发 从这篇代码中我们可以看出 在记忆过某个子问题后and可以转移到下一个状态时 子问题的状态就不会再去改变 这就说明了一个问题 就是动态规划不具有后效性 也可以说 不具有后效性的算法才可以不去重复计算子问题 也就可以更加节省时间. 递归和动态规划 虽然说 递归和动态规划有着某种相同之处 但细分来看 它们还是有不同之处的: * 递归 通过自己调用自己的方式 将整个问题划分为子问题 再以重复计算的方式达到题目目标 效率低下. * 动态规划(DP) 通过将整问题划分为子问题 随后再记忆已完成的子问题 避开重复计算的可能 从而达到目标 效率超高(在这里 我不是踩一捧一 只是将两种算法进行比较). 在某种情况下 你可以将带有记忆化的递归 视为动态规划. 分治思想和动态规划 动态规划的核心和分治思想的核心有点相似 它们都与子问题有关 都会把整问题分成多个局部问题 但分开看 我们可以找到细致的区别: * 分治思想主要解决的问题还是子问题不重叠 它的算法强度并不高. * 动态规划主要解决的问题还是子问题重叠 在解决这类问题时 它的用处很广泛. 在解决子问题重叠问题上 DP时一个更好的选择. 模板代码 以下为无注释版代码: 做题时间 以下为斐波那契数列练习题: A.7297 兔子数列 A21007.月落乌啼算钱(斐波那契数列) A21013.斐波那契数列 2.2爬楼梯 A想要爬上一层楼梯 楼梯共有n格台阶 A可以走一格或两格 请帮A想一想 A要爬上第n格有着多少种方法呢? 这种题目也是一道动态规划的经典例题 可惜许多初学者都不会做这样的题目 根据第一题的经验 我们一起来做一下这道题目. 首先 我们以假设的方式去找出它的递推方法 我们假设要走到第5格台阶 那么唯一能走到的便只有两种方法: 1.从第4格走到第5格. 2.从第3格走到第5格. 这可以说明一件事 便是一个台阶和它前两个台阶有着关联(无后效性) 那么 我们也就可以推测 上到第n格台阶的方案数就是上到前两格台阶的方案数 这样 我们就可以列出公式: F(0)=0F(1)=1F(2)=2F(N)=F(N−1)+F(N−2);N≥3F(0) = 0\\ F(1) = 1\\ F(2)= 2\\ F(N) = F(N - 1) + F(N - 2);\\ N\geq3 F(0)=0F(1)=1F(2)=2F(N)=F(N−1)+F(N−2);N≥3 (像不像一支宝剑👍👍👍) 注意要处理边界化问题 其非常重要. 观看代码 代码解析 此程序的的核心代码如下: 大家可能注意到了 这段代码和原来的斐波那契数列的核心代码是一模一样的 它的状态转移方程也同样是: 其实爬楼梯这道题就是斐波那契数列的进阶版 在我们刚刚列公式时就已经可以看出 它的公式只比斐波那契多出了F(2)=2F(2) = 2F(2)=2而已 所以在这里我们不多讲述. 模板代码 做题时间 A30913.爬楼梯 A30652.【递归】【入门】爬楼梯 U36981.上楼梯 2.3数字金字塔 顺推法 有一座用数字做成的金字塔 金字塔的第nnn层有着nnn个数字 从最顶部开始 请你找出一条路线 可以使此路的权值达到最大 样例如下: 答案: 在这道题中 许多码农会被其独特的输入给震惊到 但不要怕 我们一起以解决动态规划的步骤与去两道题带给我们的经验一起做一做. 在这里 我们可以想到从第一层开始 一层一层的推下去 这样做的方法也可以达到我们想要的目标 这种方法叫做顺推法 同时 由于我们在往下走时只能选择两条路 像是从第一层的1向第二层走时 我们就只可以挑选2或是3 在每一层中 我们都需要挑选一个数字 从而达到最大权值 这才是问题所在. 那么 如果从顶层开始计算 我们就要以下一层的某个阶段去看 还需要进行记忆化和最优子结构 在每个阶段中都需要记录其线路的最大权值 我们来举个例子: 就以上面的数字金字塔来说 我们将目光投向第2层 这其中有着一个权值2及3 当线路到达了2时 这条线路的总权值为1 + 2 = 3 而线路经过3时 线路的总权值为1 + 3 = 4 这时 我们就已经将总权值给记录下来了 在记录下来后 我们再去看下一层的权值. 以这样的方式 我们便可以列出公式 就是将自己上面最大的一个总权值加上自己的权值. 我们以dp[i][j]dp[i][j]dp[i][j]表示每个状态 其中iii表示层数 jjj表示列数(第iii行的第jjj个数字)w[i][j]w[i][j]w[i][j]表示此阶段的权值 我们列出下面公式: dp[i][j]=max(dp[i−1][j],dp[i−1][j−1],dp[i−1][j+1])+w[i][j]dp[1][1]=w[1][1]dp[i][j] = max(dp[i - 1][j],dp[i - 1][j - 1],dp[i - 1][j + 1]) + w[i][j]\\ dp[1][1] = w[1][1] dp[i][j]=max(dp[i−1][j],dp[i−1][j−1],dp[i−1][j+1])+w[i][j]dp[1][1]=w[1][1] 你发现什么了吗? 没错 就是我们的处理边界问题(不要忘记哦). 在列出公式后 我们写出程序: 观看代码 代码讲解 这篇程序的核心代码如下: 在forforfor循环中的一句代码便是整篇程序中的状态转移方程 此方程的意义在上面已经讲述过 因此We are talk anymore~~~~~~ 逆推法 请不要以为这就结束了 我们其实还有一种方法去解决此问题 我们将其称之为倒推法. 倒推法的思想是从最底部开始推起 以最优子结构和记忆化的方式一直到第1层 这样有一个好处就是在最后找到最大总权值时不用判断哪个更大 只需将dp[1][1]dp[1][1]dp[1][1]输出就好了 这就是好处 但坏处就是在开始编写时 我们需要把dp[n][i]dp[n][i]dp[n][i]都添加上w[n][i]w[n][i]w[n][i]的权值 这样才可以进行第n−1n - 1n−1层的推算. 而它的公式与上一个顺推法有些许不同 由于它是从下一直往上推断 所以其阶段是以上面的权值判断下方的线路总权值(没听懂的同学可以借助公式理解此话). 以nnn表示为层级数 dp[i][j]dp[i][j]dp[i][j]表示每个状态 其中iii表示层数 jjj表示列数(第iii行的第jjj个数字) w[i][j]w[i][j]w[i][j]表示此阶段的权值 我们将公式列出: dp[i][j]=max(dp[i+1][j],dp[i+1][j+1],dp[i+1][j−1])+w[i][j]dp[n][j]=w[n][j]dp[i][j] = max(dp[i + 1][j],dp[i + 1][j +1],dp[i + 1][j - 1]) + w[i][j] \\ dp[n][j] = w[n][j] dp[i][j]=max(dp[i+1][j],dp[i+1][j+1],dp[i+1][j−1])+w[i][j]dp[n][j]=w[n][j] 你发现了吗 我们这次列出的公式还是进行了边界化处理 所以说在列出公式时 我们应该敏锐的察觉到处理边界这件事情. 观看程序 在列出公式之后 我们列出程序: 代码讲解 代码核心: 你应该看出来了 在这一次 我们罗列了两个forforfor循环作为程序核心 这两步代码在上面的意义已经讲述 因此 We are talk anymore too. 模板代码 数学金字塔(顺推法): 数字金字塔(逆推法): 练习时间 A627.数字三角形 A7930.数字金字塔 A22681.数字三角形 Number Triangles 2.4最长公共子序列 给定两个字符串 求出这两个字符串的最长公共子序列LCS 这里的子序列不需要连续 但一定要保持顺序. 样例: 这道题与前面的题目难度有一些不同 我们顺着思路 一起来做一做这道题目. 我们以递推的方式去想一想 考察一下两个字符串的前缀 根据每次都一步一步的去判断最长公共子序列的方式我们便可以推出状态的表示方法为A[1=>i]andB[1=>j]A[1 => i] and B[1 => j]A[1=>i]andB[1=>j](这里指的是从a[1]a[1]a[1]至a[i]a[i]a[i] b[1]b[1]b[1]至b[i]b[i]b[i] 及AAA的前iii个字符和BBB的前jjj个字符) 以这样的方式去定义每个阶段是目前的题目是最好的解决方法. 但如果someone问我为什么我们要这么定义的话我还真回答不上来 但别担心 只要这么定义就好了 只是将其认知为这样的方法更好用就ok了 但在我观看完Macw07老师的一文讲清动态规划的本质后 发现这种问题还会有理由 在这里 我简要阐述一下 Macw07老师的观点(作者本人非常认同老师的想法 小生不才 若想学习到更多知识 可以点击链接去观看一下Macw07老师的原话): Q1:为什么要将每个阶段定义为A[1=>I]A[1 => I]A[1=>I]和B[1=>J]B[1 => J]B[1=>J] R1:递归思想的启发 * 如同上楼梯一般 在我们知道了A[i=>i−1]andB[j=>j−1]A[i => i - 1]andB[j =>j - 1]A[i=>i−1]andB[j=>j−1]的最长公共子序列后 那我们也可以根据A[i−1]andB[j−1]A[i - 1]andB[j - 1]A[i−1]andB[j−1]的关系去判断A[1=>i]andb[1=>j]A[1 => i]andb[1 => j]A[1=>i]andb[1=>j]的最长公共子序列. * 将整个字符串已不断增加前缀的方式去判断LCSLCSLCS是一个很好的方法. R2:易于表示动态变化 * 算法只需表示当前情况 不必考虑未来. * 动态规划的核心避免重复计算 通过子问题的答案推出最终答案. Q2:为何选择子字符串的前缀 R1:动态规划的特性 动态规划从最小的问题开始求解 而前缀是自然的分解方式: * 对于 A[1=>i]andB[1=>j]A[1 => i]and B[1 => j]A[1=>i]andB[1=>j] 最小的子问题是 i=0orj=0i=0 or j=0i=0orj=0 即两个字符串中任意一个为空时 LCSLCSLCS长度为 0 * 从空字符串到完整字符串的逐步扩展非常符合动态规划的思路. R2:逐步拓展问题规模 通过管理问题规模 我们可以更好的向前发展 在一个二维数组dp[i][j]dp[i][j]dp[i][j]之中 我们可以以小问题构造出大问题: * 如果我们从其他部分(如整个字符串开始下手的话) 我们将会碰到麻烦 出现问题 不能很好的去解决问题 但利用前缀的方式 可以只判断最后一个字符 再结合原来的最长公共子序列结果 就能够解决当前的子问题. 以上就是全部理由 在结束观看之后 细心的同学已经可以推出此问题的公式(状态转移方程)了 但可能大家没有做到......don't worry 在这一步 我们开始探索公式. 我们考虑多种情况 一步步的推算公式. SCENE1:A[I−1]==B[J−1]A[I - 1] == B[J - 1]A[I−1]==B[J−1] 在这里 因为两个字符相同 所以它们可以加入最长公共子序列 这时在dp动态数组上 此次dp[i][j]=dp[i−1][j−1]+1dp[i][j] = dp[i - 1][j - 1] + 1dp[i][j]=dp[i−1][j−1]+1(注:这里的 dp[i][j]dp[i][j]dp[i][j] 表示字符串 AAA 的前 iii 个字符和字符串 BBB 的前 jjj 个字符的最长公共子序列的长度. SCENE2:A[I−1]!=B[J−1]A[I - 1] != B[J - 1]A[I−1]!=B[J−1] 因为两个字符不相同 我们不可以将它们加入最长公共子序列 这是在dp动态数组上 此次dp动态数组需要判断前一个LCSLCSLCS的大小 所以在这里 我们的dp数组只能决定是排除AAA的最后一个字符还是排除BBB的最后一个字符 以找到更长的公共子序列 因此可得dp[i][j]=max(dp[i−1][j],dp[i][j−1])dp[i][j] = max(dp[i - 1][j],dp[i][j - 1])dp[i][j]=max(dp[i−1][j],dp[i][j−1]). dp[i−1][j]dp[i-1][j]dp[i−1][j] 表示排除AAA的最后一个字符后 字符串AAA的前i−1i-1i−1个字符和字符串BBB的前jjj个字符的最长公共子序列的长度. dp[i][j−1]dp[i][j-1]dp[i][j−1]表示排除BBB的最后一个字符后 字符串AAA的前iii个字符和字符串BBB的前j−1j-1j−1个字符的最长公共子序列的长度. 我们以这种方式得到最长公共子序列的最大值后即可输出. 观看代码 此代码不做讲解 自行理解. 2.6最长上升子序列 给点一个数列A 请你在此数列中找出一个最大的最长上升子序列(意为非递减序列). 样例: 这道题的难度相较于其文章前面的题型都提升了一定的难度 让我们一起来解一下这道题. 我们以拆分出子问题的方式去做出此题 以每个元素做单位 将这个元素前面看成此数列的一个子串 逐步的去分析最长上升子序列的长度. 我们以这样的方式去进行思考之后就会发现 每一个元素似乎都有可能变成最长上升子序列的最后一个元素 包括第一个也不例外 所以 在输出答案的时候 我们就要判断每一个元素前面的最长上升子序列的长度的最大值 同时 所有的元素都可以自成一个最长上升子序列 所以 在考虑边界化的时候 我们就要将所有的元素的初始值都化为1. 对于每个子串的最长上升子序列 我们判断其元素为末尾时 是否可以添加到前面的字串的最长上升子序列里 此时就需要判断此元素是否严格递增于前面的最长上升子序列 还需要判断总最长上升子序列的长度取决于以此元素为结尾的子串的最长上升子序列还是前面的子串的最长上升子序列加上现在的元素的长度 只要判断好这些 我们自然能够写出代码. 观看代码 此代码不做讲解 大家自行观看. 2.7背包问题 请大家去看一看我之前写过的一篇帖子 链接如下: 关于动态规划(背包问题)讲解 在这里 我们不做讲解. 刷题时间 A21154.物品选取 A22579.部分背包问题 A628.钞票问题 在这里面 我们讲解了七种不同的动态规划题目 在很多的 C++ 竞赛之中 我们总是可以发现动态规划的身影 其算法难度非常高 需要每位同学都多加练习 才能熟练的掌握此算法的核心. 后话 对于动态规划 我认为还是要去进行更多的刷题 在做多题目过后就会找到规律 很多题目都可以用公式解决 很多题目实际上都是有迹可循的 我也可以理解每个人对待这类算法的感觉 动态规划这个算法的核心确实较为难懂 但只要多加练习 每个人都可以学会并且运用动态规划. 以上就是我们本篇文章的主要内容了 希望看到这里的同学都可以为这篇文章点一个小赞(只需要动一下鼠标就能为我带来很大的鼓励 求求了). 在此鸣谢: Macw07老师的精选文章一文讲清动态规划的本质 此文章对这篇动态规划讲解有着很高的帮助and帮我理清了文章结构 其内部参考文献非常有干货 列在文章末尾. Ysjt | 深 ™老师的精选文章#创作计划#动态规划【C++优质版】也对此动态规划讲解文章有着很大帮助 为我创作这篇帖子提供了好的思路. 还有很多位ACGO社区的小伙伴们的帖子也为我提供了很多的价值 在此感谢每一个人的帮助. 参考文献: GeeksforGeeks. (n.d.). Dynamic Programming. Retrieved Gupta, R. (2023). Mastering Dynamic Programming: A Step-by-Step Guide. Medium. Retrieved Stanford University. (n.d.). Dynamic Programming. Retrieved Stanford University. (2013). Dynamic Programming Lecture Notes (CS161). Retrieved Bellman, R. (1966). Dynamic Programming. Science, 153(3731), 34–37. doi 【算法】动态规划 一文写清楚什么是动态规划 【动态规划】动态规划算法基本概念,原理应用和示例代码
第三十节:方源!你又来抢? 几乎与此同时,在另一边。 “父亲母亲大人,事情基本就是这样子的。”方正站在笔直,口中恭谨地道。 堂中,方源的舅父古月冻土,以及舅母坐在宽背大椅上,均皱着眉头。 舅母咬牙切齿,一边为方正抱打不平,一边又有些幸灾乐祸:“方源这个小兔崽子,他勒索其他人也就罢了,想不到他连亲弟弟都不放过。竟然如此绝情绝义!不过他这次放下如此大错,估计不久后就要被学堂开除了。” “好了,你少说几句吧。”舅父叹了一口气,又对方正道,“你失了元石,不过也只是一块,不要紧。下去到账房那里再领一枚,这里没有你的事,你下去好好修行。以你的甲等资质,成为第一个中阶蛊师,极有可能。你不要浪费你的天资,我和母亲都期待着你成为第一呢。” “是,父亲母亲,孩儿告退了。”方正满怀心事地退了下去。 他暗暗思考:“哥哥今天堵住学堂大门,抢了所有学员。造成了如此恶劣的影响,恐怕真的要被开除了。到那个时候,我该不该为他求情呢?” 他脑海中有两个声音在对峙。 一个声音说道:“不用求情,他连你这个亲弟弟的元石都要抢。就算被开除,也是他咎由自取。天作孽尤可活,自作孽不可活啊!” 另一个声音则道:“他可是你的亲哥哥,长着相似的脸,血浓于水啊。好吧,即便是你不认他,也得求情。你若不求情,外人会怎么看你呢,恐怕会觉得你无情无义吧。” 看着方正离开了厅堂,舅母忍耐不住,高兴地道:“老爷,我们断了方源的生活费。这个小兔崽子忍耐不住,这次犯下了大错了!居然敢堵在学堂大门当众斗殴,还勒索,这是挑衅学堂家老啊。我看他被开除,是八九不离十的事情了。” 舅父却摇头:“你把事情想得太简单了。方源不会被开除的,甚至可能任何惩罚都没有。” “为什么?”舅母大为不解。 舅父冷笑一声:“斗殴打架是受到鼓励的,只要不出严重后果。这次斗殴,有学员死了吗?没有。” 舅母有些不服“老爷怎么知道就没有?打斗这种事情,总是有意外发生的。” 舅父闭上双眼,倚在靠背上:“你这婆娘,就是天真。你真当学堂家老是摆设么?侍卫什么时候出动的?他们在最后出动,这就说明场面一直在控制之下。若是有人重伤,他们早就冲出来了,不会等到最后的。” “你不是蛊师,不会明白,学堂里并不禁止学员之间的争斗,甚至保持鼓励态度。打斗越多,对战斗就越有帮助。有的学员,甚至还能打出铁交情。长辈们也不会追究这个事情。这已经是惯例了。若谁要护犊子出头,谁就坏了这规矩。” 舅母听得傻眼,不甘心地道:“那方源抢了这么一大笔元石,什么屁事都没有?就这样放过他了?有了这么一大笔元石,对他的修行帮助太大了。” 舅父睁开双眼,满脸的阴霾:“还能怎么办?难道你让我过去亲手把他的元石抢过来吗?不过此事也不是不可以利用。方源连弟弟方正都抢劫勒索,这就是他的败笔。方正是甲等资质,总有一天会比他强大,我们就利用这件事情,分化挑拨方正。让方正彻底远离方源,为我们所用!”…, 就这样,过去了三天。 方源抢劫勒索的风波,没有扩散,没有闹大,反而有了渐渐平息的趋势。 没有什么长辈破坏规矩,来亲自找方源的麻烦,学堂家老自然也睁一只眼闭一只眼。 虽然这期间,有过两三个少年,不忿元石被强抢的结果,重新挑战了方源。 但在方源轻而易举地将他们打趴下后,所有人都意识,自己若是不勤学苦练拳脚,是赢不了方源的。 在这些少年中,刮起了一阵苦练拳脚基本功的热潮。 拳脚教头乐坏了,他从未见过有这么一届的学员,对基本拳脚有如此的热情和执着。以前他教导的时候,学员们无不是兴趣缺缺,哈欠连天。如今却是炯炯有神,不断求教。 学堂家老特意来询问他这边的情况。 拳脚教头带着兴奋的语气,禀告道:“学员们表现出了出人意料的热情,转变太大了。只是其中有一个叫做方源的,还是和以前一样的懒散。” 学堂家老笑起来,拍拍他的肩膀道:“你所说的这个学员,就是导致其他人转变的源头啊。” 拳脚教头诧异不解。 当然变化远不止这些。 经此一事,方源毫无疑问地成了全体学员的公敌,被所有人敌视和孤立。 再没有人跟他讲一句话,没有人和他打一声招呼。 少年们无不卯足了劲,私底下勤学苦练基础拳脚。在身后长辈们的鼓励和授意下,他们已经决定,务必要亲手把场子找回来。 平静的表面下,暗流在汹涌。 又四天过去。 学堂家老再次分发元石补贴,方源也到了再次动手的时候。 “方源,你抢一次不够,还想抢我们的元石?!”学员们被方源又堵在门口,惊怒交加。 方源站在大门中央,束手在背后,表情冷酷,语气平淡:“每人一块元石,就可免受皮肉之苦。” “方源,你欺人太甚。我要向你挑战!”古月漠北怒吼一声,率先战了出来。 “哦?”方源眉角微微扬起。 漠北举起双拳冲了过去,几个回合后,他昏倒在地。 “漠北你太没用了,看我的!”古月赤城大吼一声,冲向方源。 攻防转换了一下,他就步入了漠北的后尘。 方源的战斗经验是他们的千万倍还不止,虽然刚刚修行,但每一份力量均是用得恰到好处。 这群少年才刚刚起步,若一拥而上,还可能带给他点小小的麻烦。但是这样一个个上来挑战,比第一次抢劫还要轻松。 一刻钟之后,他带着一个鼓鼓囊囊的钱袋子,悠然而去。留下一地的少年,有的昏迷一动不动,有的抱着肚子或者捂着裤裆,在呻吟嚎叫。 “兄弟们,快来收拾场子了。”侍卫们呼喊着,纷纷涌了上去。
共27672条