随笔分类 - 动态规划————线性DP
摘要:题目描述 wobmaj有N个数据结构,第i个数据结构具有工业指数Ai和包容指数Bi(Bi≤Ai) 他会不断执行下面这个操作,直到无法再执行为止: 选择二元组(i,j),将第i个数据结构套进第j个数据结构里,其中Ai<Bj。 每个数据结构只能嵌套和
阅读全文
摘要:gate 设跳到i最少踩到的石子数为f[i],j ∈ (s,t), c[i]为i是否有石子。 dp方程:f[i] = min(f[i-j]+c[i]) 看起来很简单的样子? 但是这道题的数据范围比较奇怪,桥的距离有1e9,显然数组开不下… 不过石子的个数只有100,而且跳的距离只有1~10。 所以两
阅读全文
摘要:gate 四 重 循 环 暴 力 枚 举 因为最终状态是用完所有的牌…所以可以根据用了多少牌来dp 设f[i][j][k][l]表示每种牌用了多少张…它就可以从f[i-1][j][k][k],f[i][j-1][k][l]...转移过来 代码如下 #include<cstdio> #include<
阅读全文
摘要:gate 就这个破题dp+高精度...我de了好久/kk 设f[i][j]表示前i个数,用了j个*号,num(l,r)表示从第l位到第r位表示的数字 f[i][j] = max(f[i][j],f[k][j-1]*num(k+1,i)) 不用高精是60pts,代码如下: #include<cstdi
阅读全文
摘要:传送门 修改数组里的值,使数组(不严格)单调,且改动最小。 考虑动态规划。 上升和下降的方法都是一样的,以上升为例。 当修改一个数时,一定会把它修改成数组中出现过的某一个数。 那么把数组离散化一下,b[i]表示数组中第i大的数(这里可以用unique去重一下)。 那么只要枚举将每个数修改成其
阅读全文
摘要:传送门 这道题信息量好大啊 1.Dilworth定理 Dilworth定理:对于一个偏序集,最少链划分等于最长反链长度。 Dilworth定理的对偶定理:对于一个偏序集,其最少反链划分数等于其最长链的长度。 其实就是说,对于一个序列, 最大上升子序列长度 = 不上升子序列个数,最大不上升子序列长度
阅读全文
摘要:题目qwq (第一道蓝题) 先把第一个序列每个数出现的顺序记下来(数字本身不用记), 然后第二个序列的每个数都对照它的顺序,这样只要得到一个升序的序列就行了qwq 如果遇到出现顺序在前面的数,就用二分法找一下它的位置,然后把原来存下来的顺序覆盖掉 #include<cstdio> using nam
阅读全文
摘要:题目 (第一道绿题) 有点像最大子矩阵qwq 用前缀和存图,l,r代表横向的一段区间,区间和就是a[r]-a[l-1] 然后用一个k从上到下dp...因为每次l,r变化的时候原来的k就没有用了,所以k开一个表示第几行的一维数组,把最大值记下来就行qwq 特殊的是如果为0是不能选择的...改成-∞就可
阅读全文