随笔分类 - 动态规划
摘要:题目链接 链接 翻译 注意是有向图,不然这题读起来会觉得题目很奇怪。。 题解 bfs 求最短路 d[1..n],然后对于 的边连实线,否则连虚线。 就可以做 dp 了,对于实线 dp[x] = min(dp[x],dp[y]),对于虚线 dp[x] = min(dp[x],d
阅读全文
摘要:题目链接 链接 翻译 给你一棵树,树上的每一个节点都带有权值。 让你统计这样的点 的个数,使得以 为根的时候,所有以 开始,以某个节点结束的路径中每个节点的权值 都是唯一的,即每个权值都只出现了一次。 称这样的 为 \(distinctive\ roo
阅读全文
摘要:题目链接 链接 翻译 可以从数组中任意一个位置开始出发走一条路径,每一步可以往走到相邻的一个格子(左或右)。但是不能超过边界。 问你所有不同的长度为 的路径的和是多少。 然后要支持更新操作实时回答这个路径和。 题解 和 都只有 ,其实是比较容易
阅读全文
摘要:题目链接 链接 翻译 translation 题解 动规。 类似这样?...倒着推一下,注意边界就行。 代码 #include <bits/stdc++.h> #define lson l,mid,rt*2 #define rson mid+1,r
阅读全文
摘要:题目链接 链接 翻译 给你一个排列,其中有一些位置上的数字被remove了,让你全都放回去。 定义相邻两个数字如果奇偶性不同, 值加 。 求数字全都放回去之后 的值的最小值。 题解 设 表示前 个数字放了 \(j
阅读全文
摘要:题目链接 链接 翻译 给每道菜确定一个取出时间,每道菜对不愉快程度的贡献为它取出的时间和最佳取出时间差的绝对值。 要求最后不愉快程度之和最小,求这个最小值。 题解 动态规划,一个很显然的贪心是,我们把 进行排序,然后依次从小到大地顺序分配每个菜是最好的。 也即时间小的菜分配对应的时刻也应
阅读全文
摘要:题目链接 链接 翻译 题目描述挺绕的。 有 种颜色的棍子吧。 每种颜色棍子提供的时候都是一对一对给的(也即两根两根地给,然后颜色相同,长度也相同)。 每种颜色有 对不同长度棍子。 然后题目的意思是说选两种不同颜色,然后分别选一对棍子。(这样就有 根棍子了) 组
阅读全文
摘要:题目链接 链接 翻译 给你一个每个节点都有 个孩子的无限树,和第 个孩子的连边的权值为 。 让你找路径数,这个路径要满足以下条件: 从根开始 路径的权值和为n 至少有一条边的权值大于等于d 问你路径数目。 题解 动态规划 设 表示权值和为 \
阅读全文
摘要:题目链接 点我呀 翻译 你可以把字符串 中的某个字符改成任意一个字符最多 次,这样做之后,问你最后形成的 中最多会有多少个 子序列。 题解 设 表示前 个字符,修改了 次, 有 个 \(
阅读全文
摘要:题目链接 点我呀 翻译 给你一个长度为n(N ⇐ 3000)的字符串S。 一个长度为m(m<=n)的字符串T。 字符串是一个magic string当且仅当这个字符串有前缀T。 (这两个字符串都只有小写字母) 对于S, 可以把它的第一个字符删掉然后加到一开始为空串的字符串A的最前面。 也可以加到A的
阅读全文
摘要:题目链接 点我呀 翻译 给你一个初始数字x, 你可以对它做两种操作: 1.整除2然后加上10 2.减去10 问你在n次1操作和m次2操作之内, 能不能把数字x变成是小于0的。 题解 n和m都小于30? 这不傻逼题吗? dp[i][j]表示i次1操作,j次1操作x能到达的最小值。 \(dp[i][j]
阅读全文
摘要:题目链接 点我吧 题目大意 给你一个长度为n的序列,先手先选择一个区间[L,R], 这个区间里面的数字, 让后手选择一个删掉。 然后计算剩余的R-L个数字的和sum(如果R-L等于0,认为和是0)。 后手总是想让这个sum的值比较低,所以它总是会选择最大的那个数字删掉。 现在让你帮先手选择一个区间,
阅读全文
摘要:问题描述 给你一个序列,让你在其中找一段连续的子序列,使得这个连续的子序列的和是最大的。 这个问题有个解法叫做Kadane algorithm 它实际上有点动态规划的意思在里面,设f[i]表示以第i个数字作为结尾的连续子序列的和的最大可能值。 则 \(f[i] = max(f[i-1]+a[i],a
阅读全文
摘要:"题目链接" 【题解】 考虑每个位置它最后能接多少单位的水。 显然就是这个min(位置左边最高的位置,位置右边最高的位置) 当前这个位置的高度。 这就是这个位置最后水上涨的高度。 两个边界注意是不会储水的(都会掉到左边或者右边的边界外去). 每个位置左边最高的位置可以用DP很容易搞出来 【代码】
阅读全文
摘要:´问题描述: 在一个圆形操场的四周摆放着 n 堆石子。现要将石子有次序地合并成一堆。规定每次只 能选相邻的 2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。试设计一 个算法,计算出将 n 堆石子合并成一堆的最小得分和最大得分。 ´编程任务: 对于给定 n 堆石子,编程计算合并成一堆的
阅读全文
摘要:´问题描述: 用 2 台处理机 A 和 B 处理 n 个作业。设第 i 个作业交给机器 A 处理时需要时间 i a ,若 由机器 B 来处理,则需要时间 i b 。由于各作业的特点和机器的性能关系,很可能对于某些 i, 有 i i a ³ b ,而对于某些 j,j≠i,有a j 【题解】 设f[i]
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 我们最后要的是一条最长的路径。 这条路径的权值和是所有点的权值和 所有边的权值和且这个值最大。 显然如果我们在某一条边上的累计的权值和=0) 所以如果我们求的是最大的权值和 边权和的话,那么求出来的路径一定不会有中间某个地方走着走着没油的
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 dp[i][j][k]表示前i列,有j个联通块下,最后一列的状态为k的方案数 k如果为1的话,表示最后一列两个块不一样,k如果为0表示一样 枚举最后一列的情况转移就好 【代码】 cpp include using namespace st
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 设dis[v]表示v以上的点到达这个点的最大权值(肯定是它的祖先中的某个点到这个点) 类似于最大连续累加和 当往下走(x,y)这条边的时候,设其权值为w,以及到目前为止走过的最大权值和cur 如果cura[x]那么它以及它下面的所有节点都
阅读全文