
简单DP
笑对这个世界的志贵
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【DP】URAL 2018 The Debut Album
Problem Description 给你n个数,由1,2组成,连续1的个数不能超过a,连续2的个数不能超过b。 Input The only line contains integers n, a, b (1 ≤ a, b ≤ 300; max( a, b) + 1 ≤ n ≤ 50 000). Output Output the number of different record翻译 2017-05-04 20:29:23 · 308 阅读 · 0 评论 -
【dp】 HDU - 2859 Phalanx
Problem Desciption 给你一个n * n的矩阵,求符合对称矩阵的最大子矩阵的宽度。(对称矩阵)以左下角到右上角的对角线,其他字母按照这条对角线对称。 思路: 1*1的矩阵,肯定是对称矩阵,所以可以对第一行初始化为1。状态转移方程:第二行开始就变成2*2的子矩阵了,这时候以自身为开始,向上,向右比较(匹配),相等的数量称为匹配数。如果匹配数大于dp[i - 1][j + 1]。翻译 2017-08-14 20:52:45 · 229 阅读 · 0 评论 -
【DP 三维数组】UVA - 11420 Chest of Drawers
Problem Description 给你一个柜子,至上往下有n个抽屉,问你恰好s个是安全的,有多少种情况。 例如至上往下第三个是锁着的,但是第二个并不是锁着的。那么第三个不安全,如果第四个是锁着的,那么第四个安全。 如果至上往下第一个是锁着的,那么第一个安全。 思路: dp[i][j][0]代表着当前i个抽屉,j个安全,最下面那个是不锁着的情况数,dp[i][j][1]代表最翻译 2017-12-20 17:35:11 · 502 阅读 · 0 评论 -
【DP && 概率 && n个巧克力放m个盒子有盒子是空的概率】UVA - 10648 Chocolate Box
Problem Description 给你n个巧克力,m个盒子,将n个巧克力放入m个盒子中,有盒子不空的概率是多少。 思路: dp问题。dp[i][j]代表放了i个巧克力,j个盒子有巧克力的概率。 dp[i-1][j] * j/m 第i个巧克力 放进了有巧克力的盒子里。 dp[i-1][j-1] * (m-j+1)/m 第i个巧克力放进了其他空的盒子里。 d翻译 2018-01-24 09:10:21 · 241 阅读 · 0 评论 -
子段和问题
【最大子段和】51nod 1049 最大子段和 Problem Description N个整数组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的连续子段和的最大值。当所给的整数均为负数时和为0。 例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13。和为20。 思路: dp[i]代表 以第i个元翻译 2018-01-26 19:49:11 · 301 阅读 · 0 评论 -
【DP && 矩阵快速幂 && 快速乘】URAL - 1013 K-based Numbers. Version 3
Step 1 Problem: 题意: 给你限制长度为n,必须是k进制,让你求长度为n的正整数且 中间不能有连续的两个零 的个数 取模 MOD。 数据范围: 2 <= n, k, MOD <= 1e18. Step 2 Involving algorithms: DP 矩阵快速幂 快速乘 Step 3 Ideas: 最开始想到的求法就是...翻译 2018-03-15 11:38:08 · 266 阅读 · 0 评论 -
【dp 挺棒的】URAL - 1260 Nudnik Photographer
Problem Description 有n个数 1-n,将它们排成一列,最左边必须是1,后面排序的数字与它相邻数字的差不能大于2 问你有多少种排列方式 思路: 这种类型的题,自己还是想不出,参考别人博客理解了。 别人博客的思路很完美,直接用了。 n个人时求dp[n]。第2个位置放2时有dp[n-1]种;第2个位置放3,第3个位置放2,第4个位置只能放4,有d...翻译 2018-03-10 21:03:01 · 217 阅读 · 0 评论 -
【满二叉树 && dp】URAL - 1117 Hierarchy
Step1 Problem: 满二叉树,中序遍历按照1,2,3…给二叉树编号。 x点下一步只能到达 x+1点 或者 x-1点,花费时间为两个点之间路径的节点个数(不包含端点)。 求u点到v点所需时间。 数据范围:0 < u, v<=2^31-1。 Step2 Involving algorithms: 满二叉树 && dp St...翻译 2018-03-29 18:56:04 · 292 阅读 · 0 评论 -
【预处理 && DP】URAL - 1167 Bicolored Horses
Step1 Problem: 将n匹马按照顺序放进k个马厩,每个马厩的不愉快值 = 0马的数量 * 1马的数量,求最小的不愉快值 数据范围: 1 <= k <= n <= 500. Step2 Involving algorithms: DP Step3 Ideas: 状态dp[k][n]:将n匹马按照顺序放进k个马厩的最小不愉快值。...翻译 2018-04-03 09:22:41 · 179 阅读 · 0 评论 -
【预处理 && 记忆化搜索】URAL - 1586 Threeprime Numbers
Step1 Problem: 求长度为n,任取连续的三位组成的数都是素数的个数。 数据范围: 3 <= n <= 10000. Step2 Involving algorithms: dp记忆化搜索 Step3 Ideas: 预处理出 100-1000的所有素数 dfs的时候,参数:第几位,上两位,上一位。 继续搜索的条件满足连续...翻译 2018-04-03 09:39:06 · 202 阅读 · 0 评论 -
【DP】ZOJ - 3872 Beauty of Array
Step1 Problem: 定义Beauty数是一个序列中所有不同数的和,求一个序列所有连续子序列的Beauty和 数据范围: 1<=N<=1e5, 0<=序列值<=1e6 Step2 Involving algorithms: DP Step3 Ideas: 状态dp[i] : 以第i个数结尾的子序列的和 pos[x]:...翻译 2018-04-22 09:06:25 · 239 阅读 · 0 评论 -
【DP && 分成一些连续的序列,使的所有序列最大值-最小值的和最大】CodeForces - 484D Kindergarten
Step1 Problem: 给你 n 个数,分成一些连续的序列,使的所有序列最大值-最小值的和最大。 Step2 Ideas: 9 0 1 2 3 4 2 我们看中间的 0~4,因为 0~4 都是递增的 1~3 都是递增肯定是最优的。 核心点就是判断 0 是递增还是递减最优,4 是递增还是递减最优。 dp[n][1]:第 n 个数是递增的,最优结果(分配后和...翻译 2018-07-14 10:15:18 · 615 阅读 · 0 评论 -
【DP && 两个字符串求 k 个顺序子串相同最大长度】CodeForces - 682D Alyona and Strings
Step1 Problem 给你两个长度分别为n, m的字符串,在第一个字符串找 k 个连续的子串,在第二个字符串中均出现其顺序一样,求最大这些子串长度和 Step2 Ideas: dp[i][j][k][1]:第一个串第 i 位, 第二个串第 j 位,当中 k 个连续的子串,s1[i] == s2[j] 且是最后一个子串末尾 dp[i][j][k][0]:第一个串第 i...翻译 2018-07-15 10:06:24 · 410 阅读 · 0 评论 -
【DP && 全排列 && 每一行选一个 1 保证其列不相等的方案数】UVALive 8521 LOL
Step1 Problem 给你 5 个由 01 组成的长度为 100 的字符串。 让你求选 5 个 1 且 1 不能再同一列的方案数 Step2 Ideas: 学习博客 dp[i][j]:到了第 j 列,选了 i 个 1 且第 i 个 1 对应的列 大于 第 i-1 个 1 对应的列的方案数 结果等于 = 5 个字符串全排列后的 sum{ dp[5][100...翻译 2018-08-14 21:30:14 · 340 阅读 · 0 评论 -
【组合数学dp】ACM-ICPC 2018 徐州赛区网络预赛 A. Hard to prepare
Step1 Problem: 给你 n 个数排成一圈,每个数的范围[0, 2^k-1],相邻两个数字它们异或值不能为 2^(k-1),求满足条件的排列数。 数据范围: T<=20, 0 < n, k<=1e6. Step2 Ideas: 我们假设 a 不能与他相邻的数为 a1,也就是 a 异或 a1 = 2^(k-1). 第一反应:如果不是圈,那么排列数 = 4*3^(n-...翻译 2018-10-02 16:24:15 · 265 阅读 · 0 评论 -
【最长公共子序列】51 nod 1006 最长公共子序列Lcs
Problem Description 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。 Input 第1行:字符串A 第2行:字符串B (A,B的长度 <= 1000) Output翻译 2017-08-07 11:31:31 · 284 阅读 · 0 评论 -
【最大子段和】SDUT 3100 动态规划?
动态规划? Time Limit: 1000MS Memory Limit: 65536KB Problem Description 动态规划作为《运筹学》的一个分支,被广泛的用于解决较为复杂的经济管理问题,以达到的最优抉择,获得最大经济收益为目的。也因其多变性,非常的频繁的出现在信息学竞赛的赛场上。 动态规划的核心思想为不断将问题分解为子问题,一直到可以较容易的得到最优答案,再去翻译 2017-03-14 19:38:37 · 322 阅读 · 0 评论 -
【编辑距离问题】 51 nod 1183 编辑距离
Problem Description 编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。 例如将kitten一字转成sitting: sitten (k->s) sittin (e->i) sitting (->翻译 2017-08-07 20:50:35 · 272 阅读 · 0 评论 -
【最长上升子序列】51 nod 最长单增子序列
输入 第1行:1个数N,N为序列的长度(2 <= N <= 50000) 第2 - N + 1行:每行1个数,对应序列的元素(-10^9 <= S[i] <= 10^9) 输出 输出最长递增子序列的长度。 输入示例 8 5 1 6 8 2 4 5 10 输出示例 5 思路: 平时的方法,O(n * n)会超时,得用二分翻译 2017-08-07 21:00:21 · 501 阅读 · 0 评论 -
【子序列个数】51nod 1202 子序列个数
子序列的定义:对于一个序列a=a[1],a[2],……a[n]。则非空序列a’=a[p1],a[p2]……a[pm]为a的一个子序列,例如4,14,2,3和14,1,2,3都为4,13,14,1,2,3的子序列。对于给出序列a,有些子序列可能是相同的,这里只算做1个,请输出a的不同子序列的数量。由于答案比较大,输出Mod 10^9 + 7的结果即可。 Input 第1行:一个数N,表示序列的长度翻译 2017-08-09 10:50:37 · 420 阅读 · 0 评论 -
【更难矩阵取数问题】51nod 1084 矩阵取数问题 V2
Problem Description 一个M*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,先从左上走到右下,再从右下走到左上。第1遍时只能向下和向右走,第2遍时只能向上和向左走。两次如果经过同一个格子,则该格子的奖励只计算一次,求能够获得的最大价值。 例如:3 * 3的方格。 1 3 3 2 1 3 2 2 1 能够获得的最大价值为:翻译 2017-08-09 11:00:02 · 240 阅读 · 0 评论 -
【最大子矩阵和】51nod 1051 最大子矩阵和
Problem Desciption 一个M*N的矩阵,找到此矩阵的一个子矩阵,并且这个子矩阵的元素的和是最大的,输出这个最大的值。 例如:3*3的矩阵: -1 3 -1 2 -1 3 -3 1 2 和最大的子矩阵是: 3 -1 -1 3 1 2 Input 第1行:M和N,中间用空格隔开(2 <= M,N <= 500)。 第2 - N翻译 2017-08-09 11:23:59 · 324 阅读 · 0 评论 -
【循环数组最大子段和】51nod 1050 循环数组最大子段和
Problem Description N个整数组成的循环序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的连续的子段和的最大值(循环序列是指n个数围成一个圈,因此需要考虑a[n-1],a[n],a[1],a[2]这样的序列)。当所给的整数均为负数时和为0。 例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13。和为20。翻译 2017-08-09 11:15:11 · 247 阅读 · 0 评论 -
【m段最大连续子段和的和】HDU - 1024 Max Sum Plus Plus
Problem Description 给你m, n, 接下来有n个数,让你求m段 连续子段的和 的和的最大值 思路: 求1段的时候就是最大连续字段和 状态转移方程就是dp[j] = max(dp[j] + a[j], a[j]); 然后求出最大的dp[j]就是结果,现在是m段,那么到了第2段的时候,我们得用数组Max[]记录第一段到了j - 1的时候的最大值,这时候状态转移方程就是 dp翻译 2017-08-12 19:16:24 · 404 阅读 · 0 评论 -
【dp】HDU - 1176 免费馅饼
Problem Description 为了使问题简化,假设在接下来的一段时间里,馅饼都掉落在0-10这11个位置。开始时gameboy站在5这个位置,因此在第一秒,他只能接到4,5,6这三个位置中其中一个位置上的馅饼。问gameboy最多可能接到多少个馅饼?(假设他的背包可以容纳无穷多个馅饼). 给你一个n,接下来有n行 x,T,分别代表n个馅饼,在T秒的时候落在了x的位置。 思路:翻译 2017-08-12 19:51:42 · 291 阅读 · 0 评论 -
【dp】HDU - 1260 Tickets
Problem Description 一个人八点开始上班,卖票,可以一次卖一张,也可以一次卖相邻的两张,问你最快什么时候可以下班。给你T组测试数据,每组测试数据给你一个n,代表有n个人排队买票,给你n个数,代表每个人买票需要的时间,给你n-1个数,代表相邻两个人一起买票需要的时间。 思路:比较简单,想一想状态转移方程就出来了: dp[i] = min(dp[i - 1] + a[i], dp[翻译 2017-08-12 19:57:57 · 298 阅读 · 0 评论 -
【简单的线性DP】SDUT 3924 疯狂的bLue
疯狂的bLue Time Limit: 1000MS Memory Limit: 65536KB Problem Description 众所周知神秘的 ACM 实验室有一个史诗级的出题狂魔,名曰 bLue。最近 bLue 又露出了邪恶的笑,原来是 bLue 接了为校赛出题的单子。 距离校赛开始还有 N 小时,由于各种奇怪的原因出题组可以出题的时间并不固定,大致可以分为M个时间段。翻译 2017-07-28 09:05:53 · 355 阅读 · 0 评论 -
【最长上升子序列 && 输出路径】HDU - 1160 FatMouse's Speed
Problem Description 给你若干个,老鼠的数据,数据里面有两个,一个是体重,一个是速度,让你求出最长的子序列,按照体重不断的减少,速度不断的增加。 思路: 我们按照速度从大到小排序,就变成了求体重最长上升子序列了。状态转移方程dp[i] = max{dp[0]…..dp[i - 1]}(满足上升条件) + 1. #include<bits/stdc++.h> using na翻译 2017-08-14 08:44:10 · 868 阅读 · 0 评论 -
【dp】POJ - 3186 Treats for the Cows
Problem Description 给你一个n,接下来有n个数,你可以每次从最前面或者最后面取出一个数data,得到的价值就是data * (第几个取出这个数)。让你求出取完所有数得到的最大价值。 思路: 正常想法会想到贪心,每次取出最小的(这样会错)。所以我们选择用dp, dp[i][j],i表示左边取了i个,j边上右边取了j个。状态转移方程就是 dp[i][j] = max(翻译 2017-08-14 08:53:14 · 241 阅读 · 0 评论 -
【记忆化搜索】HDU - 1078 FatMouse and Cheese
Problem Description 给你两个数n, k。接下来给你一个n * n 的矩阵,矩阵上的值,代表奶酪数,到那个值,你就可以把那个值所有奶酪吃掉。下一步只能去更大的值(k代表你的下一步可以最大走k距离,也就是你下一步可以走1-k之间的任何一个距离)。 思路: 用数组存已经走过的点,这样就可以避免重复走导致浪费大量的时间(记忆化搜索)。 #include<bits/stdc++.h翻译 2017-08-14 09:00:20 · 293 阅读 · 0 评论 -
【记忆化搜索】POJ - 1088 滑雪
Problem Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子 1 2 3 4 5 16 17 18 19 6翻译 2017-08-14 09:08:21 · 230 阅读 · 0 评论 -
【矩阵取数】SDUT 3773 数字矩阵
数字矩阵 Time Limit: 1000MS Memory Limit: 65536KB Problem Description bLue 站在了一个 n*m 的填有数字的矩阵中,他可以选择从矩阵的四个顶点之一出发,到达斜对面的顶点。每一步必须向靠近目的地的方向移动,且每次移动都可以累加所在位置上的数字。 例如,bLue 选择从左上角出发,那么目的地为右下角,则他每次只能向右或向翻译 2017-03-14 19:29:37 · 503 阅读 · 0 评论 -
【组合数学dp】Educational Codeforces Round 51 (Rated for Div. 2) D. Bicolorings
Step1 Problem: 给你 2*n 的矩阵,你可以对于每个格子填涂黒色或者白色,如果相邻颜色一样看成同一块,问你涂完后恰好有 k 块的方案数。 数据范围: 1 <= n <= 1000, 1 <= k <= 2n. Step2 Ideas: 总有一股组合数学的味道。 直接说题解: dp[i][0][k]: 恰好为 k 块上下都黑的方案数 dp[i][1][k]...翻译 2018-10-02 16:33:44 · 261 阅读 · 0 评论