动态规划
文章平均质量分 50
moomhxy
你若是天才,我便是疯子
展开
-
51nod 1202 子序列个数 【计数DP】
子序列的定义:对于一个序列a=a[1],a[2],......a[n]。则非空序列a'=a[p1],a[p2]......a[pm]为a的一个子序列,其中1<=p1<p2<.....<pm<=n。例如4,14,2,3和14,1,2,3都为4,13,14,1,2,3的子序列。对于给出序列a,有些子序列可能是相同的,这里只算做1个,请输出a的不同子序列的数量。由于答案比较大,输出Mod 10^9 + 7的结果即可。题目链接:http://www.51nod.com/Cha.原创 2020-06-04 21:44:14 · 220 阅读 · 0 评论 -
Codeforces Round #637 (Div. 2) D. Nastya and Scoreboard 线性DP
题目链接:http://codeforces.com/contest/1341/problem/D题意:0~9的数字是由图中的木棒组成的,现在给你若干个显示屏,你可以恰好添加k个木棒问你能够组成的最大数字是多少思路:num[i][j]表示i加j个木棒能凑成的最大的数,我们先初始化num数组,f[i][j]表示前i个用了j个木棒的最大值我们从后往前考虑,这样保证前面的一定最大,从前往后考虑...原创 2020-04-29 20:58:53 · 231 阅读 · 0 评论 -
洛谷 P6040 单调队列优化DP
题目链接:https://www.luogu.com.cn/problem/P6040简单一维单调队列优化DP,单调队列优化DP的话要知道单调队列需要维护的是什么,并且有明确的左右边界,这样才能及时的加入新策略或删除过时策略#include<bits/stdc++.h>using namespace std;typedef long long ll;#define fi...原创 2020-04-29 14:57:15 · 241 阅读 · 0 评论 -
POJ 1821 Fence 动态规划+单调队列优化
题目链接:https://www.acwing.com/problem/content/300/题意:有N块木板从左到右排成一行,有M个工匠对这些木板进行粉刷,每块木板至多被粉刷一次。第 i 个木匠要么不粉刷,要么粉刷包含木板 Si 的,长度不超过 Li 的连续的一段木板,每粉刷一块可以得到 Pi 的报酬,不同工匠的Si不同。思路:f[i][j]表示前i个工匠粉刷前j块木板的最多报酬,那么f...原创 2020-04-09 14:32:44 · 409 阅读 · 0 评论 -
BAPC 2019 L-Lucky Draw 概率DP
题目链接:https://nanti.jisuanke.com/t/44330题意:有n个人玩游戏,每个人拥有k条生命。每轮每个人会有p的概率不会死,求最后是平局的概率思路:设f[i][j]表示i轮后剩余j条生命的概率,那么 f[i][j] = p * f[i - 1][j] + (1 - p) * f[i - 1][j + 1]由于生命都相同,P(平局) = 1 - P(某人赢) = 1 ...原创 2020-03-24 13:25:07 · 459 阅读 · 0 评论 -
Codeforces Round #627 (Div. 3) F. Maximum White Subtree 树形DP 换根
题目链接:http://codeforces.com/contest/1324/problem/F题意:给你一颗树,每个结点为白色或者黑色,对于每个子树的权值就是白色点的数量 - 黑色点的数量,求1~n以每个点为根的子树的权值。思路:比较裸的换根DP,首先dfs一遍求出来以1为根的代价,然后再考虑每个点换根的代价就行了。#include<bits/stdc++.h>...原创 2020-03-16 23:18:07 · 170 阅读 · 0 评论 -
Codeforces Round #627 (Div. 3) E. Sleeping Schedule 线性DP
题目链接:http://codeforces.com/contest/1324/problem/E题意:每天有h小时,总共要睡n次,每次你可以选择在a[i] or a[i] - 1小时后睡觉。如果睡觉的区间在[l, r]的话认为是好的求如何安排使得睡觉好的次数最多。思路:f[i][j] 表示第i次在时间j睡觉的最多次数,有点类似背包的思想,我们枚举时间,每次只需要判断当前时间是否在[l...原创 2020-03-16 23:10:09 · 191 阅读 · 0 评论 -
CodeForces - 1247E Rock Is Push【线性DP】
题目链接:https://codeforces.com/problemset/problem/1247/E题意:一个n*m的矩阵,有个别位置会有小球,小球受到撞击会沿着方向撞到墙为止(每个小球会占一个格子)。你从左上角出发,只能向右或者向下走,问你走到右下角的方案数。思路:首先我们定义我们的状态f[i][j][0] 表示在(i, j) 这个位置向右走的方案数,f[i][j][1] 表示在(...原创 2019-11-21 23:54:51 · 299 阅读 · 0 评论 -
HDU 5890-Eighty seven【背包 bitset优化】
题意:给你n(n<50)张牌, 让后q(100000)次询问,每次会抽调三张牌,然后问你剩下的牌数能否拼成87.思路:这题可以用背包来做,预处理出所有情况下的答案,但是会超时,这时候我们就需要bitset来优化一下了。bitset相当于一个bool类型的数组,每次用上一次的值左移a[i] 位然后或上当前值,最后判断一下第87位是否为1就行了。#include<bits/s...原创 2019-10-22 17:03:48 · 280 阅读 · 0 评论 -
CodeForces - 148D Bag of mice【概率DP】
Pear和Fish正在进行这样一个游戏:一个袋子里一开始装着w个白球和b个黑球。从Pear开始,每次轮流随机抽出一个球。如果抽出的球是白色的,则抽出这个球的人立即获胜。每当一个球被取出后(然后结算获胜情况后),会有另一个球自动滚出来(不算任何人抽的)。每个人抽球、和自动滚出来的球都是等概率的。那么Pear获胜率是多少呢?Input两个数w,b含义如上。w,b<=1000Out...原创 2019-10-15 22:25:47 · 195 阅读 · 0 评论 -
HDU 3853-LOOPS【期望DP】
题意:有一个R*C的迷宫,从(1,1)走到(R,C),每个格子给出停留在原地,向右走一格和向下走一格的概率,且每走一步需要2点能量,求最后所需要的能量期望。题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3853思路:f[i][j] 就表示走到(i, j) 这个点的期望能量,那么转移方程不难想到,这题主要有两个需要注意的地方,一是停留在原地的花...原创 2019-10-15 17:16:31 · 329 阅读 · 0 评论 -
SGU 495-Kids and Prizes【期望DP】
题意:有n个奖品,m个人排队来选礼物,对于每个人,他打开的盒子,可能有礼物,也有可能已经被之前的人取走了,然后把盒子放回原处。求最后m个人取走礼物的期望总数。多组数据保留9为小数思路:f[i] 表示第i个人取走礼物的期望总数,那么对于f[i] 来说, 它有f[i - 1] / n 的概率取到一个空的,1 - f[i - 1] / n 的概率取到一个礼物,那么转移方程就是f[i] = ...原创 2019-10-15 15:33:31 · 181 阅读 · 0 评论 -
HDU 4405-Aeroplane chess【期望DP】
题意:0到n的格子,每次仍色子走1到6步,也可能会有飞行棋,直接跳到某格,问你走到n的期望步数。思路:期望倒着推,f[i] 就表示走到i格子的期望。正着考虑的话你不知道当前位置是哪个地方来的,可能是之前六个位置的,也可能是之前某个飞行棋跳过来的,所以我们倒着考虑,每个位置只会去往六个地方。所以f[i] = sum( f[i + k] / 6 ) + 1 , 1 <= k <= 6...原创 2019-10-15 14:22:21 · 192 阅读 · 0 评论 -
动态规划模板总结
动态规划:通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。试用情况:最优子结构性质。如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构性质(即满足最优化原理)。最优子结构性质为动态规划算法解决问题提供了重要线索。 无后效性。即子问题的解一旦确定,就不再...原创 2018-08-06 17:06:47 · 4789 阅读 · 0 评论 -
HDU1114 - Piggy-Bank
Before ACM can do anything, a budget must be prepared and the necessary financial support obtained. The main income for this action comes from Irreversibly Bound Money (IBM). The idea behind is simple...原创 2018-08-11 10:10:43 · 181 阅读 · 0 评论 -
HDU1058 - Humble Numbers
A number whose only prime factors are 2,3,5 or 7 is called a humble number. The sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, ... shows the first 20 humble numbers. ...原创 2018-08-12 13:29:10 · 92 阅读 · 0 评论 -
动态规划分类题目总结
动态规划分类有很多划分方法,网上有很多是按照状态来分,分为一维、二维、区间、树形等等。我觉得还是按功能即解决的问题的类型以及难易程度来分比较好,下面按照我自己的理解和归纳,把动态规划的分类如下:一、简单基础dp这类dp主要是一些状态比较容易表示,转移方程比较好想,问题比较基本常见的。主要包括递推、背包、LIS(最长递增序列),LCS(最长公共子序列),下面针对这几种类型,推荐一下比较好的学...转载 2018-08-07 21:50:05 · 2482 阅读 · 1 评论 -
动态规划入门题目
1.Robberies 连接 :http://acm.hdu.edu.cn/showproblem.php?pid=2955 背包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢多少钱 最脑残的是把总的概率以为是抢N家银行的概率之和… 把状态转移方程写成了f[j]=max{f[j],f[j-q[i].v]+q[i].money}(f[j]表示在概率j...转载 2018-08-07 21:57:58 · 803 阅读 · 0 评论 -
洛谷P1002 过河卒【dp】
棋盘上AA点有一个过河卒,需要走到目标BB点。卒行走的规则:可以向下、或者向右。同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。棋盘用坐标表示,AA点(0, 0)(0,0)、BB点(n, m)(n,m)(nn, mm为不超过2020的整数),同样马的位置坐标是需要给出的。现在要求你计算出卒从AA点能够到达BB点的路径的条数,...原创 2018-09-04 20:09:35 · 300 阅读 · 0 评论 -
51Nod - 1134 最长递增子序列【动态规划】
给出长度为N的数组,找出这个数组的最长递增子序列。(递增子序列是指,子序列的元素是递增的)例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10。Input第1行:1个数N,N为序列的长度(2 <= N <= 50000) 第2 - N + 1行:每行1个数,对应序列的元素(-10^9 <= Sii <= 10^9)Output输...原创 2018-09-03 22:06:53 · 109 阅读 · 0 评论 -
51nod1183 编辑距离【动态规划】
编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。例如将kitten一字转成sitting:sitten (k->s)sittin (e->i)sitting (->g)所以kitten和sitting...原创 2018-09-27 21:25:07 · 145 阅读 · 0 评论 -
51nod1134 最长递增子序列【动态规划】
给出长度为N的数组,找出这个数组的最长递增子序列。(递增子序列是指,子序列的元素是递增的)例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10。Input第1行:1个数N,N为序列的长度(2 <= N <= 50000)第2 - N + 1行:每行1个数,对应序列的元素(-10^9 <= S[i] <= 10^9)Output...原创 2018-09-27 21:30:03 · 126 阅读 · 0 评论 -
51nod1085 背包问题【动态规划】
在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2……Wn(Wi为整数),与之相对应的价值为P1,P2……Pn(Pi为整数)。求背包能够容纳的最大价值。Input第1行,2个整数,N和W中间用空格隔开。N为物品的数量,W为背包的容量。(1 <= N <= 100,1 <= W <= 10000)第2 - N + 1行,每行2个整数,Wi和Pi,...原创 2018-09-28 20:20:06 · 129 阅读 · 0 评论 -
洛谷P1192 台阶问题【dp递归】
有NN级的台阶,你一开始在底部,每次可以向上迈最多KK级台阶(最少11级),问到达第NN级台阶有多少种不同方式。输入输出格式输入格式: 两个正整数N,K。 输出格式: 一个正整数,为不同方式数,由于答案可能很大,你需要输出ans \bmod 100003ansmod100003后的结果。 输入输出样例输入样例#1: 复制5 2输出样例#1: 复...原创 2018-10-08 16:39:24 · 334 阅读 · 0 评论 -
洛谷P1025 数的划分【dp】
将整数nn分成kk份,且每份不能为空,任意两个方案不相同(不考虑顺序)。例如:n=7n=7,k=3k=3,下面三种分法被认为是相同的。1,1,51,1,5;1,5,11,5,1;5,1,15,1,1.问有多少种不同的分法。输入输出格式输入格式: n,kn,k (6<n \le 2006<n≤200,2 \le k \le 62≤k≤6) 输出格式...原创 2018-10-08 16:45:26 · 520 阅读 · 0 评论 -
洛谷P1115 最大子段和【dp】
题目描述给出一段序列,选出其中连续且非空的一段使得这段和最大。输入输出格式输入格式: 第一行是一个正整数NN,表示了序列的长度。第二行包含NN个绝对值不大于1000010000的整数A_iAi,描述了这段序列。 输出格式: 一个整数,为最大的子段和是多少。子段的最小长度为11。 输入输出样例输入样例#1: 复制72 -4 3 -1 2 ...原创 2018-10-15 22:36:05 · 193 阅读 · 0 评论 -
洛谷P1616 疯狂的采药【完全背包】
题目描述LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同种类的草药,采每一种都需要一些时间,每一种也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最...原创 2018-10-16 15:14:34 · 234 阅读 · 0 评论 -
完全背包优化及模板
题目有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。思路:与01背包不同的是一个物品可以选无穷个,写出递推关系:dp[ 0 ] [ j ] =0,dp[ i+1 ] [ j ]=max{ dp[ i-k*w[i] ]+k*v[i] }(k>=0)...原创 2018-10-16 23:06:47 · 1050 阅读 · 0 评论 -
洛谷P1060 开心的金明【dp】
金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NN元钱就行”。今天一早金明就开始做预算,但是他想买的东西太多了,肯定会超过妈妈限定的NN元。于是,他把每件物品规定了一个重要度,分为55等:用整数1-51−5表示,第55等最重要。他还从因特网上查到了每件物品的价格(都是整数元...原创 2018-10-19 23:21:37 · 154 阅读 · 0 评论 -
HDU1069 - Monkey and Banana【dp】
题目大意给定箱子种类数量n,及对应长宽高,每个箱子数量无限,求其能叠起来的最大高度是多少(上面箱子的长宽严格小于下面箱子) 思路 首先由于每种箱子有无穷个,而不仅可以横着放,还可以竖着放,歪着放。。。长宽高可以有6种形态,用结构体数组存储起来,然后按照长排序,然后就变成了判断是否满足条件,从满足条件中找最大值。 #include<cstdio>#incl...原创 2018-10-28 22:07:31 · 159 阅读 · 0 评论 -
HDU114 - Piggy-Bank 【完全背包】
在 ACM 能够开展之前,必须准备预算,并获得必要的财力支持。该活动的主要收入来自于 Irreversibly Bound Money (IBM)。思路很简单。任何时候,某位 ACM 会员有少量的钱时,他将所有的硬币投入到小猪储钱罐中。这个过程不可逆,因为只有把小猪储钱罐打碎才能取出硬币。在足够长的时间之后,小猪储钱罐中有了足够的现金,用于支付 ACM 活动所需的花费。但是,小猪储钱罐存在一个...原创 2018-10-29 20:37:11 · 97 阅读 · 0 评论 -
HDU1087 - Super Jumping! Jumping! Jumping!【动态规划】
zh成功的在他人的帮助下获得了与小姐姐约会的机会,同时也不用担心被非“川大”的女票发现了,可是如何选择和哪些小姐姐约会呢?zh希望自己可以循序渐进,同时希望挑战自己的极限,我们假定每个小姐姐有一个“攻略难度值”从攻略成功第一个小姐姐开始,zh希望每下一个需要攻略的小姐姐难度更高,同时又希望攻略难度值之和最大,好了,现在小姐姐们排成一排,zh只能从左往右开始攻略,请你帮助他找到最大的攻略难度和...原创 2018-10-24 20:36:04 · 245 阅读 · 0 评论 -
51nod1006 -最长公共子序列Lcs【动态规划】
给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。比如两个串为: abcicbaabdkscab ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。 收起输入第1行:字符串A第2行:字符串B(A,B的长度 <= 1000)输出输出最长的子序列,如果有多个,随意输出1个。输入样例...原创 2018-10-31 22:19:34 · 167 阅读 · 0 评论 -
poj3176-Cow Bowling【dp】
The cows don't use actual bowling balls when they go bowling. They each take a number (in the range 0..99), though, and line up in a standard bowling-pin-like triangle like this: 7 ...原创 2018-11-01 16:52:30 · 266 阅读 · 0 评论 -
poj2385 - Apple Catching【动态规划】
DescriptionIt is a little known fact that cows love apples. Farmer John has two apple trees (which are conveniently numbered 1 and 2) in his field, each full of apples. Bessie cannot reach the apple...原创 2018-11-01 21:46:48 · 288 阅读 · 0 评论 -
51nod 1002 数塔取数问题【dp】
一个高度为N的由正整数组成的三角形,从上走到下,求经过的数字和的最大值。每次只能走到下一层相邻的数上,例如从第3层的6向下走,只能走到第4层的2或9上。 5 8 4 3 6 97 2 9 5 例子中的最优方案是:5 + 8 + 6 + 9 = 28 收起输入第1行:N,N为数塔的高度。(2 <= N <= 500)第2 - N +...原创 2018-11-04 19:13:47 · 251 阅读 · 0 评论 -
51nod 1118 机器人走方格【dp】
M * N的方格,一个机器人从左上走到右下,只能向右或向下走。有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果。 收起输入第1行,2个数M,N,中间用空格隔开。(2 <= m,n <= 1000)输出输出走法的数量。输入样例2 3输出样例3思路:这道题也是较简单的,由于机器人只能向下或者向右走,所以在最后...原创 2018-11-04 19:21:19 · 134 阅读 · 0 评论 -
51nod1049 最大子段和【动态规划】
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。 收起输入第1行:整数序列的长度N(2 <= N <= 50000)第2 - N + 1行:N个整数(-10^9 <...原创 2018-11-02 21:06:05 · 106 阅读 · 0 评论 -
51nod 1083 矩阵取数问题【动态规划】
一个N*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,从左上走到右下,只能向下向右走,求能够获得的最大价值。例如:3 * 3的方格。 1 3 32 1 32 2 1 能够获得的最大价值为:11。 收起输入第1行:N,N为矩阵的大小。(2 <= N <= 500)第2 - N + 1行:每行N个数,中间用空格隔开,对应格子中奖励...原创 2018-11-04 19:32:55 · 286 阅读 · 0 评论 -
51nod 1050 循环数组最大子段和【动态规划】
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。 收起输入第1行:整数序列的长度...原创 2018-11-04 19:53:09 · 207 阅读 · 0 评论