![](https://img-blog.csdnimg.cn/20190927151132530.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
第一章 动态规划
文章平均质量分 59
题解
不怕困难的博客
记录题解,心得,算法和数据结构的博客
展开
-
树形DP问题C++详解
在学习树形dp之前我们先了解一下什么是树。树简单来说就是连通的无环图。原创 2023-03-31 21:50:27 · 588 阅读 · 0 评论 -
AcWing 1010. 拦截导弹
因此对于所有的 w[i] ,必然存在一个边界 j ,满足∀k∈[0,j),有q[k]原创 2023-02-22 10:44:30 · 377 阅读 · 0 评论 -
AcWing 1016. 最大上升子序列和
1016. 最大上升子序列和一个数的序列bi,当b1原创 2023-02-22 10:36:06 · 367 阅读 · 0 评论 -
AcWing 1012. 友好城市
AcWing 1012. 友好城市Palmia国有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市。北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同。每对友好城市都向政府申请在河上开辟一条直线航道连接两个城市,但是由于河上雾太大,政府决定避免任意两条航道交叉,以避免事故。编程帮助政府做出一些批准和拒绝申请的决定,使得在保证任意两条航线不相交的情况下,被批准的申请尽量多。输入格式第1行,一个整数N,表示城市数。原创 2023-02-22 10:28:00 · 254 阅读 · 0 评论 -
AcWing 482. 合唱队形
482. 合唱队形N位同学站成一排,音乐老师要请其中的(N−K)位同学出列,使得剩下的K位同学排成合唱队形。合唱队形是指这样的一种队形:设K位同学从左到右依次编号为12…K,他们的身高分别为T1T2TK, 则他们的身高满足T1…>TK(1≤i≤K)。你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。输入格式输入的第一行是一个整数N,表示同学的总数。第二行有N。原创 2023-02-22 09:42:28 · 258 阅读 · 0 评论 -
AcWing1014. 登山
五一到了,ACM队组织大家去登山观光,队员们发现山上一共有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号。同时队员们还有另一个登山习惯,就是不连续浏览海拔相同的两个景点,并且一旦开始下山,就不再向上走了。然后根据状态表示的特性,将两个状态的值相加,取一个 Max 就是 先上升后下降的最长子序列的长度。队员们希望在满足上面条件的同时,尽可能多的浏览景点,你能帮他们找出最多可能浏览的景点数么?这种边界情况一样是先上升后下降的最长子序列的子集,因此不用额外讨论。原创 2023-02-22 08:46:24 · 128 阅读 · 0 评论 -
AcWing 1017. 怪盗基德的滑翔翼
第二行包含N个不同的整数,每一个对应一幢建筑的高度h,按照建筑的排列顺序给出。有一天,怪盗基德像往常一样偷走了一颗珍贵的钻石,不料却被柯南小朋友识破了伪装,而他的滑翔翼的动力装置也被柯南踢出的足球破坏了。而他最为突出的地方,就是他每次都能逃脱中村警部的重重围堵,而这也很大程度上是多亏了他随身携带的便于操作的滑翔翼。于是,对于任意位置 x,我们分别需要求出以他为右端点的最长上升子序列,以及作为左端点的最长下降子序列。他希望尽可能多地经过不同建筑的顶部,这样可以减缓下降时的冲击力,减少受伤的可能性。原创 2023-02-21 16:27:29 · 354 阅读 · 0 评论 -
AcWing算法提高课1.1数字三角形模型全部题解
AcWing1015.摘花生AcWing1018.最低通行费AcWing1027. 方格取数AcWing275. 传纸条原创 2023-02-21 16:07:54 · 97 阅读 · 0 评论 -
AcWing275. 传纸条
班里每个同学都可以帮他们传递,但只会帮他们一次,也就是说如果此人在小渊递给小轩纸条的时候帮忙,那么在小轩递给小渊的时候就不会再帮忙,反之亦然。小渊和小轩希望尽可能找好心程度高的同学来帮忙传纸条,即找到来回两条传递路径,使得这两条路径上同学的好心程度之和最大。从小渊传到小轩的纸条只可以向下或者向右传递,从小轩传给小渊的纸条只可以向上或者向左传递。列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。输出一个整数,表示来回两条路上参与传递纸条的学生的好心程度之和的最大值。原创 2023-02-21 16:03:13 · 340 阅读 · 0 评论 -
AcWing1027. 方格取数
f[i1,k−i1,i2,k−i2]→f[k,i1,i2]:两个小朋友同时走k步,从(1, 1), (1, 1)走到(i1, j1), (i2, j2)能获得的最大花生数目.f[i1, j1, i2, j2] : 由摘花生问题可以推广出从(1, 1), (1, 1)走到(i1, j1), (i2, j2)能获得的最大花生数目.f[i1−1,j1,i2−1,j2]→f[k−1,i1−1,i2−1]:代表两个小朋友都走了k−1步,小朋友1要从(i1−1,j1)所以需要判断(i1,j1),(i2,j2)原创 2023-02-21 15:42:56 · 394 阅读 · 0 评论 -
AcWing1018.最低通行费
也就是,f[i][j] = max(f[i - 1][j], f[i][j - 1]) + w;而第 i 层的答案只依赖于第 i 层和第 i - 1 层,容易想到滚动数组优化。一维转移:f[j] = max(f[j], f[j - 1]) + w;f[i][j]表示从左下角到位置 [i,j]的最小值。而在经过中间的每个小方格时,都需要缴纳一定的费用。的正方形的网格,去参加一个非常重要的商务活动。的正整数,为网格上每个小方格的费用。输出一个整数,表示至少需要的费用。他要从网格的左上角进,右下角出。原创 2023-02-21 11:53:29 · 434 阅读 · 0 评论 -
AcWing1015.摘花生
题目大多要求的是Max/Min/数量...那么、状态如何划分的呢?y总说状态划分这东西不是凭空捏造出来的、是你积累的题目中见的多了、自然而然就知道如何去解决了。借用集合的思想、对这个题目进行分析、那本题要求的正是从左上角(1,1)到右下角(i,j)的路线中、花生数最大的那一条。可以发现、本题路线一共有两种、一种是从上面下来的、第二种是从左边过来的、那么我们就可以根据这个特点进行状态划分。分析的时候有点难度、不过输出的时候答案就简单了、我们所要求的不正是开始输入的那个n和m么。1:状态表示,2:状态划分。原创 2023-02-20 11:21:15 · 353 阅读 · 0 评论