DP
文章平均质量分 57
何况虚度光阴
这个作者很懒,什么都没留下…
展开
-
美丽序列(Dp)
具体地说:for each i, 1原创 2023-07-06 15:05:30 · 368 阅读 · 0 评论 -
Magic Maze(dp+dfs)
首先看到这个问题肯定会想到用dfs加动态规划来做(因为有不同的路径,又要求最大值) 但最开始我就根据自己想的 先用start数组找到起点 再从起点依次使用dfs找到路径再找到最大值。原创 2023-07-06 11:11:50 · 203 阅读 · 0 评论 -
合并回文子串(区间dp)
输入两个字符串A和B,合并成一个串C,属于A和B的字符在C中顺序保持不变。如"abc"和"xyz"可以被组合成"axbycz"或"abxcyz"等。我们定义字符串的价值为其最长回文子串的长度(回文串表示从正反两边看完全一致的字符串,如"aba"和"xyyx")。需要求出所有可能的C中价值最大的字符串,输出这个最大价值即可。原创 2023-07-04 17:07:02 · 464 阅读 · 0 评论 -
C. Logo Turtle (DP,思维)
考虑每一个命令,选择改变或者不改变,当前的决策对于以后产生的影响就是,停在了哪个位置,正朝着哪个方向。由此可以设出状态:dp[i][j][k][d]表示前i个命令,使用了j次机会,当前停留在k位置,正朝着d方向。不妨设初始位置为L,则最右可到达2×L,最左可达到0位置。给一个含有T、F的字符串,T表示转向,F表示前进1格。现在可以把其中的T改为F,或F改为T,改变n次(可重复改变某一位置的字母),问相对于起点最远能走多远。原创 2023-07-04 14:43:04 · 266 阅读 · 0 评论 -
B. Buses Codeforces Beta Round 79 (Div. 1 Only)
给定一个数n,起点是0 终点是n,有m两车,每辆车是从s开去t的,我们只能从[s,s+1,s+2....t-1]处上车,从t处下车。问能否去到点n,并且求方案数。:因为车是无序的,所以应该优先处理最快下车的点。这样就能对后面进行更新。数据大,明显不能到达的点是没用的,离散化一下即可。设L[x]表示有多少辆车能够到达x处。原创 2023-07-03 10:50:01 · 66 阅读 · 0 评论 -
D. Optical Experiment
第一行包含一个整数n(1 ≤ n ≤ 106),表示光线的数量。他展示了这样的情况:有些光线的组合,其中每一条光线与组合中的其他光线都相交。一个好奇的学生问教授:“老师,是否存在一些光线的组合,其中所有光线都与组合中的每一条光线相交?第一个测试用例的输出是3,因为光线1、4和3是彼此相交的光线,即1与4和3相交,3与4和1相交,4与1和3相交。因此,该组合中的每条光线都与其他光线相交。所有光线从第一面的孔进入,从盒子的另一面的孔出射。输出包含一个整数,表示光线中最大的相互相交的组合中光线的数量。原创 2023-06-27 15:26:29 · 84 阅读 · 0 评论 -
G. Hits Different(DP)
给出一个三角形矩阵,类似于数字三角形的dp模型,拿走任意一块,他的[i - 1, j] [i - 1, j - 1]都会受到影响。原创 2023-05-18 15:16:08 · 134 阅读 · 0 评论 -
H. Don‘t Blame Me(dp and)
题意:给你一个数组有n个数,问你能有多少个该数组的在子序列and操作后,2进制刚好含有k个1。ai最多只有63,所以直接开二维数组。原创 2023-05-18 14:52:25 · 160 阅读 · 0 评论 -
D. Mysterious Present(Codeforces Beta Round 4 (Div. 2 Only))
个信封的长和宽,以及一张卡片的长和宽,要求选出最多的信封,并且这些信封的长和宽都比前面的信封要大,并且最小的信封能够装下这张卡片。输出这些信封的数量和编号。数组中寻找最大的值,即为所求的答案。为了输出方便,我们在转移的过程中,记下每个状态对应的决策节点。考虑到这是一道动态规划题目,我们需要先对原问题进行拆分。具体而言,我们需要找到最长的一个信封序列。个信封结尾的最长信封序列长度。个信封结尾的最长信封序列的前一个节点的编号。数组,就能得到构成最长信封序列的信封的编号。数组的遍历过程中,一边更新。原创 2023-04-25 10:22:50 · 441 阅读 · 0 评论 -
Educational Codeforces Round 144 (Rated for Div. 2)D. Maximum Subarray
考虑不取第i个位置的情况,当前位置是需要 - x 的,那么dp(i,j) = max(0,dp(i-1,j)) + A[i] - x ,需要注意的是如果 i == j 时,此时是不合法的,因为当前不取的话,前i - 1个数字不可能选择 j个数。接下来我们考虑取第i个位置的情况 ,那么如果前面i - 1结尾的字段和大于0那么取dp(i-1,j-1)一定是最优的,否则我们从0开始,可以得出 dp(i,j) = max(0,dp(i-1,j-1)) + A[i] +x。那么我们可以分成三种情况。原创 2023-04-14 17:24:10 · 99 阅读 · 0 评论 -
前缀和之子矩阵的和
题目描述输入一个n行m列的整数矩阵,再输入q个询问,每个询问包含四个整数x1, y1, x2, y2,表示一个子矩阵的左上角坐标和右下角坐标。对于每个询问输出子矩阵中所有数的和。输入格式第一行包含三个整数n,m,q。接下来n行,每行包含m个整数,表示整数矩阵。接下来q行,每行包含四个整数x1, y1, x2, y2,表示一组询问。输出格式共q行,每行输出一个询问的结果。数据范围1≤n,m≤1000,1≤q≤100000,1≤x1≤x2≤n,1≤y1≤y2≤m,−100原创 2022-03-17 21:32:21 · 92 阅读 · 0 评论 -
C. Remove the Bracket(TypeDB Forces 2023 (Div. 1 + Div. 2, Rated, Prizes!))
思路:要让结果最小,就要把最大的分配给a0去乘,最小的分配给a2去乘。我们假定dp[i][0]表示a[i]将拆出来的x与前项相乘所得的到目前为止的最小值,相对的,dp[i][1]就表示将拆出来的y与前项相乘所得的到目前为止的最小值,最后的答案就是将a[n]分别与dp[n-1][0]和dp[n-1][1]所代表的状态计算并比较得出最小值。+yn−2⋅xn−1+yn−1⋅an.的最小值。题意:给定正整数序列 a,将a[i]拆分为xi+yi,并且xi和yi满足对于给定s (xi−s)⋅(yi−s)≥0,原创 2023-03-17 21:41:24 · 134 阅读 · 0 评论 -
A. Alternating Sum(数列,逆元)
思路:容易想到,每个周期的∑组成的数列成等比,公比q=(b/a)^k,因此可以用等比数列公式求和。为了保证时间复杂度,需要用到快速幂运算;为了防止中间过程值溢出,需要多处取模,其中用费马小定理求逆元;题意:给出一组长度为n+1且元素为1或者-1的数组S(0~n),数组每k个元素为一周期,保证n+1可以被k整除。对1e9+9取模的结果。原创 2023-03-14 19:55:55 · 63 阅读 · 0 评论 -
B Byfibonacci(DP 打表)
如果 n 的范围较小,那就是01背包,但 n<=1e7 就不能以值域作为状态,但我们可以发现看题解 :设 w , ww 为小于 x 的 Fibonacci 最大值和次大值,那么符合条件的子集有且仅有他们中的一个。但是我们要注意,次大的fib会计算重复。dp[0][i] 表示 i 选取最大的那个斐波那契数的乘积和。dp[1][i] 表示 i 选取次大的那个斐波那契数的乘积和。这个题有一个点,就是每个数字,不可能不由小于本身的最大两个fib组成。整个序列最大值是小于本身的第一个fib,还是第二个fib即可。原创 2023-03-13 14:51:22 · 146 阅读 · 0 评论