![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
文章平均质量分 61
disPlayLzy_
梦在前方,路在脚下
展开
-
Luogu P1858 多人背包___k优解01背包dp
求01背包前k优解的价值和设fi,jf_{i,j}fi,j表示恰好装满体积iii的第jjj优解若不考虑jjj,根据0/10/10/1背包的性质有fi=min(fi,fi−vo+wo)f_{i}=min(f_i,f_{i-v_o}+w_o)fi=min(fi,fi−vo+wo)那么就是枚举每一个物品ooo,然后因为fi−vof_{i-v_o}fi−vo跟fif_{i}fi中的优解肯定是递减的,利用归并思想O(K)O(K)O(K)合并即可时间复杂度:O(NVK):O(NVK):O原创 2022-07-04 21:54:47 · 200 阅读 · 0 评论 -
Luogu P1128 [HNOI2001] 求正整数___质因数分解+dp
dp原创 2022-06-29 19:15:15 · 158 阅读 · 0 评论 -
Luogu P1108 低价购买___dp
lg1108原创 2022-06-29 19:06:55 · 97 阅读 · 0 评论 -
湖南多校对抗赛 Vocabulary___dp
题目大意:给定333个字符串A,B,CA,B,CA,B,C,包括小写字母和$问有多少种填写方案,使得字典序问有多少种填写方案,使得字典序问有多少种填写方案,使得字典序A<B<C$max(∣A∣,∣B∣,∣C∣)<=1e6max(|A|,|B|,|C|)<=1e6max(∣A∣,∣B∣,∣C∣)<=1e6分析:考虑可能产生贡献的成分,不妨设fi,0/1/2/3f_{i,0/1/2/3}fi,0/1/2/3表示前iii个填完了,A<B<CA<B<原创 2022-05-19 13:21:27 · 106 阅读 · 0 评论 -
哈尔滨理工大学2021新生赛 L 翻转卡片___dp
题目大意:n<=1e3n<=1e3n<=1e3分析:不考虑选择顺序,设fi,j,kf_{i,j,k}fi,j,k表示前iii个卡片,选了jjj个卡片,第iii个卡片是否正面朝上(1是0否1是0否1是0否)的合法方案数。假设到了第iii位,填111,则上一位必定是000,fi,j,1+=fi−1,j−1,0f_{i,j,1}+=f_{i-1,j-1,0}fi,j,1+=fi−1,j−1,0填000则上一位必定是111,fi,j,0+=fi−1,j,1f_{i,j,原创 2021-11-27 14:35:04 · 447 阅读 · 0 评论 -
NOIP 提高组 2010 乌龟棋
题目大意:乌龟棋的棋盘为1*N的矩阵,每个格子有一个分数(非负整数)。棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起点出发走到终点。 有M张爬行卡片,只有4种类型分别为1、2、3、4,使用i卡片后,乌龟棋子将向前爬行i格。 游戏中,玩家每次需要从所有的爬行卡片中选择一张之前没有使用过的爬行卡片,控制乌龟棋子前进相应的格子数,每张卡片只能使用一次。游戏中,乌龟棋子自动原创 2017-12-18 18:30:45 · 341 阅读 · 0 评论 -
【提高组NOIP2008】传纸条
题目大意:找两条从[1,1]走到[N,M]不重复的路径,使2条路径的好感度之和最大,求这个最大值。1<=m,n<=50题解:对于求2条从[1,1]到[N,M]的路径,不重复的时候路径和最大 设f[I,J,K,L]表示[1,1]到[I,J],[1,1]到[KL]路径无重复的最大路径和 [x,y]由[x-1,y],[x,y-1]推来 则可得 F[I,j,k,l]=min{f[I-1,J,K-1,原创 2017-12-15 21:24:11 · 487 阅读 · 0 评论 -
jzoj 2017.10.06 模拟赛
T1: 【普及模拟】石子游戏: 你在桌子上一共放了N个石子,当你放第i个石子必须遵循以下规则: 1.当i是奇数时:直接放在左数第i个位置上; 2.当i是偶数时:如果第i个石子和第i-1个石子颜色相同,直接放在第i个位置上; 否则把当前最右边的连续的颜色相同的石子全部用相反颜色的石子取代,然后在第i个位置上放下石子i。例如, 现:○○●●○○○(○代表白石子,●代表黑石子)第8个石子是白色原创 2017-10-06 14:59:44 · 521 阅读 · 0 评论 -
SSL P2701 交错匹配
题目大意: 给出2行UP[1..N],DOWN[1..M],若UP[I]=DOWN[J]=K,则up[i]跟down[j]连线,称为一条K匹配,但是同一个位置的数最多只能连一条线。另外,每个K匹配都必须且至多跟一个L匹配相交且K≠L!现在要求一个最大的匹配数。0 < N、M<=200, UP、DOWN的数都不超过32767题解: 这题,很明显用DP: 我们设f[i,j]表示前i个up[]和前原创 2017-08-16 20:00:58 · 483 阅读 · 0 评论 -
jzoj P1667 【AHOI2009】中国象棋
题目大意: 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮。求有多少种放置方法?由于值比较大,输出其mod 9999973的结果。 中国象棋中炮的行走方式大家应该很清楚吧。100%的数据中N,M不超过100 50%的数据中,N,M至少有一个数不超过8 30%的数据中,N,M均不超过6 题解: DP: 题目可以发现,每一列最多放2个炮,所以可以做动规:原创 2017-04-17 20:52:00 · 607 阅读 · 0 评论 -
洛谷 P2800 又上锁妖塔
Description小D在X星买完了想要的东西,在飞往下一个目的地的途中,正无聊的他转头看了看身边的小A,发现小A正在玩<仙剑>,可是小A很奇怪,他一直在锁妖塔的周围转来转去,可是就是不进去,于是小D问他:”你在干什么?怎么不上去?”小A说:”我在想怎么从锁妖塔外面爬上去”(倒…) 锁妖塔的建造很特别,塔总共有n层,但是高度却不相同,这造成了小A爬过每层的时间也不同.小A会用仙术,每用一次可以让他原创 2016-12-06 18:21:16 · 636 阅读 · 0 评论 -
2017.8.09 SSL 模拟赛
T1: 17倍 Times17: 题目大意: 给出一个二进制数N,求出17*N的二进制数的值。数据范围: N的位数不超过1000位。题解: 枚举: 不难发现,对于二进制上的第i位,代表的是2^i次方,而他的十七倍则是他的第i+4位+1且他本身这一位为1,然后直接枚举这个数的位数,如果这一位存在1,则给他的i+4的位+1,因为他本身已经有一个了,所以1倍+16倍就可以了。时间复杂度:O(N原创 2017-08-09 16:42:34 · 381 阅读 · 0 评论 -
2017.8.08 SSL 模拟赛
T1: 分数拆分split: 题目大意: 给出一个正整数k,求所有的正整数对(x,y),使得:1/k = 1/x + 1/y,且 x>=y。求有多少组这样的解。数据限制: 50%的数据满足:2<=k<=1000; 100%的数据满足:2<=k<=3000 题解:T2: 2、字符串展开expand: 题目大意: 我们需要对字符串进行展开: (1)对于参数p1,为展开方式: ①原创 2017-08-08 11:05:54 · 378 阅读 · 0 评论 -
洛谷 P1255 数楼梯
题目描述楼梯有N阶,上楼可以一步上一阶,也可以一步上二阶。编一个程序,计算共有多少种不同的走法。输入输出格式输入格式: 一个数字,楼梯数。输出格式: 走的方式几种。输入输出样例输入样例#1: 4 输出样例#1: 5 说明用递归会太慢,需用递推(60% N<=50 ,100% N<=5000)分析: 这题一看就是一个递推,仔细看数据,发现必须涉及高精度,没错!正解就是递推+高精度。递推:原创 2017-01-12 20:25:00 · 826 阅读 · 0 评论 -
洛谷 P1192 台阶问题
题目描述有N级的台阶,你一开始在底部,每次可以向上迈最多K级台阶(最少1级),问到达第N级台阶有多少种不同方式。输入输出格式输入格式: 输入文件的仅包含两个正整数N,K。输出格式: 输入文件stair.out仅包括1个正整数,为不同方式数,由于答案可能很大,你需要输出mod 100003后的结果。输入输出样例输入样例#1: 5 2 输出样例#1: 8 说明对于20%的数据,有N ≤ 10原创 2017-01-13 20:44:53 · 605 阅读 · 0 评论 -
jzoj P1510【普及模拟】剪草
题目描述有N棵小草,编号0至N-1。奶牛Bessie不喜欢小草,所以Bessie要用剪刀剪草,目标是使得这N棵小草的高度总和不超过H。在第0时刻,第i棵小草的高度是h[i],接下来的每个整数时刻,会依次发生如下三个步骤:(1)每棵小草都长高了,第i棵小草长高的高度是grow[i]。(2)Bessie选择其中一棵小草并把它剪平,这棵小草高度变为0。注意:这棵小草并没有死掉,它下一秒还会生长的。(3)原创 2017-03-18 12:27:15 · 388 阅读 · 0 评论 -
SSL P2463 2015年普级组模拟试题 序列
var f,a:array [0..2001,0..2001] of longint; b:array [0..2001] of longint; n,m,i,j,k,ans:longint;begin readln(n,m); for i:=1 to n do begin f[0,i]:=1;原创 2017-03-31 19:48:44 · 641 阅读 · 0 评论 -
USACO 1.5 数字金字塔 Number Triangles
题目描述观察下面的数字金字塔。写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。7 3 8 8 1 02 7 4 44 5 2 6 5在上面的样例中,从7 到 3 到 8 到 7 到 5 的路径产生了最大输入输出格式输入格式: 第一个行包含 R(1<= R<=1000) ,表示行的数目。后面每行为这个数字金字塔特定行包含的整数。所原创 2017-01-12 15:07:48 · 806 阅读 · 0 评论 -
洛谷 P1164 小A点菜
题目背景uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种。uim指着墙上的价目表(太低级了没有菜单),说:“随便点”。题目描述不过uim由于买了一些辅(e)辅(ro)书,口袋里只剩M元(M<=10000)。餐馆虽低端,但是菜品种类不少,有N种(N<=100),第i种卖ai元(ai<=1000)。由于是很低端的餐馆,所以每种菜只有一份。小A奉行“不把钱吃光不罢休”原创 2017-02-06 23:16:58 · 436 阅读 · 0 评论 -
jzoj P1028【GDOI2005】飞越原野
题目大意: 泰拉希尔原野是一个m*n的矩阵,它有两种地形,P表示平地,L表示湖泊,法里奥只能停留在平地上。他目前的位置在左上角(1,1)处,而目的地为右下角的(m,n)。法里奥可以向前后左右四个方向移动或者飞行,每移动一格需要1单位时间。而飞行的时间主要花费在变形上,飞行本身时间消耗很短,所以无论一次飞行多远的距离,都只需要1单位时间。飞行的途中不能变向,并且一次飞行最终必须要降落在平地上。当然,原创 2017-04-05 19:25:23 · 688 阅读 · 0 评论 -
模拟试——sequence
题目大意: 题解: f[i,j]表示,长度为i的好序列,以j结尾的情况总数。 然后因为N比较小,我们直接预处理出1~N每个数的全部约数。 最后DP: f[i,j]:=∑f[i-1,a[j,k]] k为j的第k个约数,a[j,k]为j的约数。 时间复杂度:O(NK*约数总数)var f,a:array [0..2001,0..2001] of longint;原创 2017-06-05 15:28:50 · 325 阅读 · 0 评论 -
模拟试——K上升段
题目大意:对于n的一个全排列,如果它可以划分成k个单调递增序列,则称其为k上升段。对每个给定的(n,k),求出n 的所有k上升段的个数。题解:设f[i,j]为从1~i分j段符合的排序的个数,就可以推出。 f[i,j]=j*f[i-1,j]+(i-j+1)*f[i-1,j-1]var a:array [0..21,0..21] of int64; i,j,n,k:longint;b原创 2017-06-15 16:34:45 · 467 阅读 · 0 评论 -
jzoj P2016 最小步数
题目大意: 从起点到终点有N步,如果“走”第K步,将会得到A[K]元钱,A[K]可能为负数,同时你也可以花100元钱“跳过”当前的这一步,即不会得到A[K]。但是任何时刻身上的钱都必须是非负的。开始时,你身上共有0元。给定数组A,求在能到达终点的情况下最小需要走过(即不是用100元钱跳过)的步数。注意:最后一步必须走,不能选择跳过。 0<=n<=100 -10000<=A[K]<=10000题原创 2017-04-08 16:15:26 · 902 阅读 · 0 评论 -
模拟试——solution
题目大意: 有N张有数字的牌,牌上的数字分别是1,…,N,问从中选出M张牌,求总和刚好是S的方案数有多少。对于30%的数据,M ≤ N ≤ 10; 对于80%的数据,M ≤ N ≤ 50; 对于所有的数据,M ≤ N ≤ 150,S ≤ 12000。题解: f[i,j,k]表示前i张选了j张和为k的方案总数。 不难发现这样会炸内存,也不难发现我们可以把i给优化,变成二维的数组。 i从1到原创 2017-06-15 16:17:21 · 365 阅读 · 0 评论 -
jzoj 模拟赛总结(2017.07.13)
T1. 马农: 题目大意: 来自大草原的两兄弟决心成为超级“马农”,专门饲养战马。他们将可以养马的区域,分为 N*N 的单位面积的正方形,每块单位面积的收益为a[i,j],收益a[i,j]可能是负数,养马也不是包赚的,马匹也可能出现生病死亡等意外。然后两人的马场都必须是矩形区域。同时,规定两个马场的矩形区域相邻,且只有一个交点。且两人希望两个马场的收益相当,希望你给他们设计马场,求共有多少种设原创 2017-07-15 11:57:57 · 923 阅读 · 0 评论 -
洛谷 P1025 数的划分
题目描述将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序)。例如:n=7,k=3,下面三种分法被认为是相同的。1,1,5; 1,5,1; 5,1,1;问有多少种不同的分法。输入输出格式输入格式: n,k (6var a:Array [-1..200,-2..100] of int64; n,i,j,m,k:longint;begin readln(n,m); a[原创 2017-01-13 20:57:32 · 365 阅读 · 0 评论 -
jzoj 模拟赛总结(2017.07.11)
T1. Oliver的成绩: 题目大意: 一次考试结束了,Oliver给出自己的语文,数学,英语成绩(位数为M)分别与年级N个人中的语文年级第一,数学年级第一,英语年级第一相差多少,如果Oliver是第一,则输出0。对于50%的数据,0var o,maxa,maxb,maxc,a,b,c,a1,b1,c1:string; i,j,n,m:longint;function jia原创 2017-07-12 20:36:49 · 514 阅读 · 1 评论 -
jzoj 模拟赛总结(2017.07.12)
T1. 蚂蚁: 有N只蚂蚁以每秒1cm的速度在长为Lcm的竿子上爬行。当蚂蚁爬到竿子的端点时就会掉落。由于竿子太细,两只蚂蚁相遇时,它们不能交错通过,只能各自反向爬回去。对于每只蚂蚁,我们知道它距离竿子左端的距离xi,但不知道它当前的朝向。请计算各种情况当中,所有蚂蚁落下竿子所需的最短时间和最长时间。 例: 竿子长10cm,3只蚂蚁位置为2 6 7,最短需要4秒(左、右、右),最长需要8秒(原创 2017-07-12 21:32:08 · 468 阅读 · 0 评论 -
HDU P1003 Max Sum
题目大意: 给定1个序列[1],[2],[3]……[n],你的工作是计算最大的子序列和。例如,给定(6、1、5、4、7),马克斯和这个序列是6 +(1)+ 5 + 4 = 14。 这样的序列有T个。1 < = T < = 20 1 < = N < = 100000 所有整数在-1000和1000之间题解:DP: 我们用fi表示以第i个结尾的最大自序列和,可推出 fi=max{fi-1,0原创 2017-12-08 19:07:53 · 234 阅读 · 0 评论 -
jzoj P1491 打鼹鼠
题目大意: 在一个n*n的网格中,在某些时刻鼹鼠会在某一个探头。你可以控制一个机器人打鼹鼠,如果第i时刻鼹鼠在某个网格中出现,且与机器人同一网格,则这个鼹鼠会被打死。机器人每一时刻只能够上,下,左,右移动一格且不能走出整个n*n的网格或原地不动,游戏开始时,你可以自由选定机器人的初始位置。现在你知道M只鼹鼠出现的时刻与网格位置(X,Y),求机器人在这一段时间内打死尽可能多的鼹鼠。 0<=n<=1原创 2017-04-02 14:58:13 · 491 阅读 · 0 评论 -
NOIP 2017 普及组 跳房子 jump
题解:这题因为答案是有已知范围[0..xn],所以我们能够去二分答案ans,这个都能想到吧… 时间复杂度:O(log2 xn) 然后我们发现对于每个答案ans’能否满足,我们就可以打个简单的dp, f[i]表示起点0到第i个位置能得到的最大分数. f[i]=max{f[j]}+si j满足max{1,d-ans’}<=xi-xj<=d+ans’ 时间复杂度:O(N^2) 当发现有fi≥原创 2017-12-07 16:52:29 · 1657 阅读 · 0 评论 -
洛谷 P1020 导弹拦截
题目大意: 对于一个导弹拦截系统:它的第一发炮弹能够拦截任意高度的导弹,但之后拦截的每一发炮弹都不能高于前一发的高度。输入N发导弹依次飞来的高度a[i],计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。1<=N<=100 0< a[i]<=30000题解: p[i]表示拦截了第i个导弹,前i个导弹用一个系统最多可以拦截多少个导弹。 q[i]表示如果拦截了第i原创 2017-04-11 20:56:06 · 553 阅读 · 0 评论 -
jzoj P1492 交错匹配
题目大意: 有两行自然数,up[1..n],down[1..m],如果up[i]=down[j]=k,那么上行的第i个位置的数就可以跟下行的第j个位置的数连一条线,称为一条K匹配,但是同一个位置的数最多只能连一条线。另外,每个K匹配都必须且至多跟一个L匹配相交且K≠L!现在要求一个最大的匹配数。题解: f[i,j]表示前i个up前j个down最多能匹配数。 1.一开始先找出b[j]所对应的全原创 2017-04-02 15:15:21 · 598 阅读 · 0 评论 -
jzoj P2150【2017.7.7普及】和谐数
题目大意: 给定一个长度为N的序列a,对于每一个数都可选或不选,把选出的数有序组成一个新的序列b,使b序列的“和谐数”最大。一个序列的和谐数如下定义:对于位置i,如果第奇数次选的则加上bi,偶数次选的则减去bi 注意:新的序列b必须是从左到右依次在a序列选择的,即不能打乱顺序。对于20%的数据,1<=n<=20 对于50%的数据,1<=n<=1000 对于100%的数据,1<=n<=1000原创 2017-07-08 18:15:05 · 1240 阅读 · 0 评论 -
SSL P2692 lunch
题目大意:原创 2017-08-14 18:55:01 · 306 阅读 · 0 评论 -
洛谷 P1049 装箱问题
题目描述有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30,每个物品有一个体积(正整数)。要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。输入输出格式输入格式: 一个整数,表示箱子容量一个整数,表示有n个物品接下来n行,分别表示这n 个物品的各自体积输出格式: 一个整数,表示箱子剩余空间。输入输出样例输入样例#1: 24 6 8 3 12原创 2017-02-08 22:22:10 · 383 阅读 · 0 评论 -
jzoj 模拟赛总结(2017.07.09)
T1: 最大值: 题目大意: 给定n个数,{x1,x2,…,xn}要求从中选出至少一个数,至多n个数,使得乘积之和最大。对于70%的数据:1 ≤ n ≤ 9 对于100%的数据: 1 ≤ n ≤ 18,-10 ≤xi≤ 10 -10 ≤xi≤ 10题解: DP: 虽然貌似排序,搜索那些这数据都能过,不过还是打了个DP. f[i,1]表示到第i位最小的负数。 f[i,2]表示到第i位原创 2017-07-09 19:08:25 · 614 阅读 · 0 评论 -
jzoj P2131【2017.4.21普及】数字游戏
题目大意: 一行n个数字数字a1,a2,a3,……,an,第二行也n个数字b1,b2,b3,……,bn,给出M个回合的机会,每回合你可以从中选择一个数字擦去它,接着剩下来的每个数字ai都要递减一个值bi,即a1减掉b1,a2减掉b2,….。如此重复M个回合,所有你擦去的数字之和就是你所得的分数,求最后你最多能得到的分数。1<=n<=2000 1<=m<=n 1<=a[1]..a[n]<=100原创 2017-04-22 15:15:58 · 851 阅读 · 0 评论 -
SSL P2822 I Will Like Matrix!
题目大意:在一个 n ∗ m 的矩阵 A 的所有位置中分别填入 0 或 1,要求填入的数必须满足 Ai,j ≤ Ai,j+1 且 A i,j ≤ A i+1,j 。询问一共有多少种不同的矩阵,并将答案对 1,000,000,007 取模。题解:DP: 我们设f[i,j]表示以[i,j]到[n,m]的这个矩阵能有多少种多少构成方法。 初值,f[n,m]=2 [n,m]到[n,m]可以放0/1原创 2017-11-14 17:18:13 · 407 阅读 · 0 评论 -
SSL P2744 树塔狂想曲
题目大意: 求一个N层三角形数塔从上往下走的路径和。 走的规则是:(i,j)- ->(i+1,j)或(i+1,j+1)。 数塔上行走的规则为: 从左上角的点开始,向下走或向右下走直到最底层结束。 小S要给它加点难度,他每次ban掉一个点(即规定哪个点不能经过),然后询问你不走该点的最大路径和。 当然他上一个询问被ban掉的点过一个询问会恢复(即每次他在原图的基础上ban掉一个点,而不原创 2017-09-26 17:35:19 · 522 阅读 · 0 评论