![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
动态规划
文章平均质量分 58
线性dp,数位dp,区间dp
不给糖吃就胡闹
这个作者很懒,什么都没留下…
展开
-
Checkout Assistant
接下来 n 行每行每件商品由一对数 ti,ci(0≤ti≤2000,1≤ci≤109)描述。当收银员正在扫描某件商品时,Bob 可以从他的手推车中偷走某些其它商品。每件商品由它的价格 ci 和收银员扫描它的时间 ti 秒定义。其时间 的最大值应该为 max(time) = v + n ,v代表物品扫描的最多花费的那个时间,n为共有多少件物品。状态转移方程:dp[j] = min(dp[j] , dp[j - t[i]] + c[i] );v为扫描时间最长的物品加上n , n 为 物品的个数。原创 2024-03-18 20:12:03 · 598 阅读 · 0 评论 -
P1005 [NOIP2007 提高组] 矩阵取数游戏
帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n×m 的矩阵,矩阵中的每个元素 ai,j 均为非负整数。dp[i][j]代表剩下的长度为到 j - i 长度时,先取i-1位置上的数较大,还是取j+1上的数较大。表示 在 i ~ j 区间 内 ,取 i-1这个位置上的数,还是 j+1这个位置上的数。对于 100% 的数据,满足 1≤n,m≤80,0≤ai,j≤1000。对于 60% 的数据,满足 1≤n,m≤30,答案不超过 1016。输出文件仅包含 1 行,为一个整数,即输入矩阵取数后的最大得分。原创 2024-03-18 20:00:55 · 515 阅读 · 0 评论 -
P3047 [USACO12FEB] Nearby Cows G(树形换根dp )
给你一棵 n 个点的树,点带权,对于每个节点求出距离它不超过 k 的所有节点权值和 mi。第一行两个正整数 n,k。接下来 n−1 行,每行两个正整数 u,v,表示 u,v 之间有一条边。最后 n 行,每行一个非负整数 ci,表示点权。原创 2024-01-22 15:42:59 · 463 阅读 · 0 评论 -
P2014 [CTSC1997] 选课 or P1273 有线电视网(树型dp + 分组背包问题)
在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习。现在有 N 门功课,每门课有个学分,每门课有一门或没有直接先修课(若课程 a 是课程 b 的先修课即只有学完了课程 a,才能学习课程 b)。一个学生要从这些课程里选择 M 门课程学习,问他能获得的最大学分是多少?原创 2024-01-22 10:32:00 · 1128 阅读 · 0 评论 -
902. 最大为 N 的数字组合 和 2376. 统计特殊整数(数位dp,记忆化搜索模板)
一般的记忆化回溯数组只需要记录几个数字后面合法的数字个数,可是这里有个限制,所以要用二位的数组记录dp[i][mask] ,i表示第i为,mask表示那些数字已被使用过了,其他数字的组合个数。2187 个七位数字,6561 个八位数字和 19683 个九位数字。我们可以写 3 个一位数字,9 个两位数字,27 个三位数字,81 个四位数字,243 个五位数字,729 个六位数字,分别表示,第几个为,这个为是否有限制,这个为是否有前导0。总共,可以使用D中的数字写出 29523 个整数。之间特殊整数的数目。原创 2024-01-20 22:02:29 · 409 阅读 · 0 评论 -
P1020 [NOIP1999 提高组] 导弹拦截
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度,计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。原创 2024-01-14 08:54:06 · 596 阅读 · 1 评论 -
动态规划状态压缩二进制基础
二进制长度:32-__builtin_clz(s) //__builtin_clz(s) 返回从最高位 0到遇到第一个1的多少位。(~s)+1 = 01110 //根据补码的定义,这就是 -s 最低 1 左侧取反,右侧不变。,n-1} 二进制表示为 (1原创 2023-09-01 15:45:06 · 115 阅读 · 0 评论 -
P1489 猫狗大战
TO 狗狗:这道题的数据范围我已经尽量按星际的游戏规则来了,如果你再固执于由于机枪兵的攻击力一定使不能达到某些血格值或者游戏中一定要造农民不能使机枪兵的人数达到 200200 的话,我只能决定将那场猫狗大战的录像公开于世人了!新一年度的猫狗大战通过 SC(星际争霸)这款经典的游戏来较量,野猫和飞狗这对冤家为此已经准备好久了,为了使战争更有难度和戏剧性,双方约定只能选择 Terran(人族)并且只能造机枪兵。由于只能相差为1,用bool类型dp[x][y]代表,x表示容量,y表示猫的个数。原创 2023-08-09 19:53:35 · 129 阅读 · 0 评论 -
P1119 灾后重建
如果无法找到从 x 村庄到 y 村庄的路径,经过若干个已重建完成的村庄,或者村庄 x 或村庄 y 在第 t 天仍未重建完成,则需要输出 −1。如果在第 t 天无法找到从 x 村庄到 y 村庄的路径,经过若干个已重建完成的村庄,或者村庄 x 或村庄 y 在第 t 天仍未修复完成,则输出 −1。接下来 M 行,每行 3 个非负整数 i,j,w,w 为不超过 10000 的正整数,表示了有一条连接村庄 i 与村庄 j 的道路,长度为 w,保证 j≠i,且对于任意一对村庄只会存在一条道路。原创 2023-08-03 16:48:11 · 315 阅读 · 0 评论 -
P1052 [NOIP2005 提高组] 过河(数学 + dp)
由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,⋯,L(其中 L 是桥的长度)。坐标为 0 的点表示桥的起点,坐标为 L 的点表示桥的终点。这道题是一道小学奥数题ax + by = k (这里是x张a面值的钱 +y张b面值的钱),k不能达到的最大值,这个值后面的值都可以达到。题目给出独木桥的长度 L,青蛙跳跃的距离范围 S,T,桥上石子的位置。它的t 和s的范围是1~10,当t~s越小时,其最大的越小,这时它可以跳到后面任意一个点上。原创 2023-08-02 20:07:25 · 331 阅读 · 0 评论 -
P1725 琪露诺
而且琪露诺按照一种特殊的方式进行移动,当她在格子 i 时,她只移动到区间 [i+L,i+R] 中的任意一格。对于 100% 的数据,N≤2×105,−103≤Ai≤103,1≤L≤R≤N。当用贪心时,我们当前状态为 i时,就是当前状态+在【i-r】到【i- l】中选最大的这样才可以在这时的状态最大值。第二行共 N+1 个整数,第 i 个数表示编号为 i−1 的格子的冰冻指数 Ai−1。在区间中我们只需要选择大的,那么如果后面有比前面大的数,前面的的数我们就默认不选。对于 60% 的数据,N≤104。原创 2023-04-04 10:00:46 · 364 阅读 · 0 评论 -
1125. 最小的必要团队(dp压缩 + 路经的记录 )
当选择 第 j 个状态时 是由 f[i | peoskills[j] ]= min(f[i] + 1,f[i | peoskills[j])f[i] + 1 < f[i | peo[j]] // f[i] 加上 第 j个人。中列出的每项技能,团队中至少有一名成员已经掌握。所谓「必要团队」,就是在这个团队中,对于所需求的技能列表。规模最小的必要团队,团队成员用人员编号表示。作为项目经理,你规划了一份需求的技能清单。含有一份该备选人员掌握的技能列表)。原创 2023-03-07 10:16:01 · 290 阅读 · 0 评论 -
282. 石子合并(区间dp)
每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。,最后一次合并代价为 11,总代价为 4+7+11=22。问题是:找出一种合理的方法,使总的代价最小,输出最小代价。设有 N 堆石子排成一排,其编号为 1,2,3,…,再合并得到 11,总代价为 4+9+11=24;如果第二步是先合并 2,3 堆,则代价为 7,得到。, 我们可以先合并 1、2 堆,代价为 4,得到。, 又合并 1,2 堆,代价为 9,得到。原创 2023-01-06 10:36:05 · 466 阅读 · 0 评论 -
291. 蒙德里安的梦想(状态压缩dp详解)
这时候我们可以只考虑一种情况,我们只放横放的木块时,其他空位一定是竖放。例如当 N=2,M=4 时,共有 5 种方案。当 N=2,M=3 时,共有 3 种方案。当i-1列和第i列&时为0,就是他们没有冲突时,在判处第2种情况时。题目是要考虑其木块是横放还是竖放,我们可以用dfs进行暴力搜索,但是这样子会超时。3、在考虑第i行和第i-1行的关系,这就是动态规划的意义的,进行递推。当输入用例 N=0,M=0 时,表示输入终止,且该用例无需处理。1、用1表示横放并且下一列不能放东西,用0表示竖放。原创 2023-01-05 11:48:47 · 420 阅读 · 0 评论 -
327. 玉米田
第 2..M+1 行:每行包含 N 个整数 0 或 1,用来描述整个土地的状况,1 表示该块土地肥沃,0 表示该块土地不育。而且,相邻的土地不能同时种植玉米,也就是说种植玉米的所有方格之间都不会有公共边缘。农夫约翰的土地由 M×N 个小方格组成,现在他要在土地里种植玉米。现在给定土地的大小,请你求出共有多少种种植方法。1.每一行的所有状态。非常遗憾,部分土地是不育的,无法种植。输出总种植方法对 108 取模后的值。第 1 行包含两个整数 M 和 N。土地上什么都不种也算一种方法。2.前一行和当前行的状态。原创 2023-01-05 10:52:19 · 71 阅读 · 0 评论 -
小国王【状态压缩DP】
题目描述在 n×n 的棋盘上放 k 个国王,国王可攻击相邻的8个格子,求使它们无法互相攻击的方案总数。输入格式共一行,包含两个整数 n 和 k。输出格式共一行,表示方案总数,若不能够放置则输出0。数据范围输入样例:3 2输出样例:16。原创 2023-01-05 10:15:37 · 337 阅读 · 0 评论 -
洛谷 P2602,POJ 2282 The Counting Problem (数位dp)
例如0~324时, 从000~299,在 00 ~ 99 有3次所以位 dp[i-1] * 3;因为从i个0到i个9共出现了i*10^i,0~9每位出现 i*10^i / 10。在00~99,每种数字有dp[2] = 20个,这里的00又算进去,如果是0~99,在数0的时候是11个,我们先用前置的0后面在处理掉它。特判最高位时,如第3位为3 0 1 2 3在 000 ~299最高位上出现了100次,1.dp[i] = dp[i-1]*10+10^i-1,这是由递推可得。·········以此类推;原创 2022-12-31 11:28:41 · 410 阅读 · 0 评论 -
P2758 编辑距离
设 A 和 B 是两个字符串。我们要用最少的字符操作次数,将字符串 AA 转换为字符串 BB。A,B 均只包含小写字母。原创 2022-12-29 14:58:53 · 118 阅读 · 0 评论 -
hdu 1159 LCS 最长公共子序列
2.当不等时,为Xi-1和Yj的最长公共子序列 与Xi 和Yj-1的最长公共子序列。1.当xi = yi时,Xi-1和Yi-1的最长公共子序列 + 1.X的前i个元素组成的序列,Y的前j个元素组成的序列。原创 2022-12-29 12:34:03 · 382 阅读 · 0 评论 -
P1776 宝物筛选(分组背包多种解法)
他粗略估算了下每样宝物的价值,之后开始了宝物筛选工作:小 F 有一个最大载重为 W 的采集车,洞穴里总共有 nn 种宝物,每种宝物的价值为 vi,重量为 wi,每种宝物有 mi 件。小 F 希望在采集车不超载的前提下,选择一些宝物装进采集车,使得它们的价值和最大。根据二进制的计算原理,任何一个十进制的整数X都可以用1,2,4,8等2的倍数相加得到,如25=16+8+1,这些2的倍数只有log2X个。给定n种物品和一个背包,第i种物品的体积为ci,价值为wi,并且有mi个,背包的总容量为C。原创 2022-12-28 17:44:51 · 460 阅读 · 0 评论 -
hdu 1712 ACboy needs your help(多重背包问题)
本题与0-1背包相比多了组的区别。这时需要增加一个for。原创 2022-12-28 17:16:58 · 408 阅读 · 0 评论 -
hud 2602 Bone Collector(0-1背包问题的解法和优化)
二维dp,记忆化回溯。原创 2022-12-27 19:25:47 · 107 阅读 · 0 评论 -
LeetCode123 题动规的典型例题,详解
LeetCode动规的总结原创 2022-06-11 11:58:39 · 243 阅读 · 0 评论 -
1524. 和为奇数的子数组数目(C语言简单易懂)
给你一个整数数组 arr 。请你返回和为 奇数 的子数组数目。由于答案可能会很大,请你将结果对 10^9 + 7 取余后返回。示例 1:输入:arr = [1,3,5]输出:4解释:所有的子数组为 [[1],[1,3],[1,3,5],[3],[3,5],[5]] 。所有子数组的和为 [1,4,9,3,8,5].奇数和包括 [1,9,3,5] ,所以答案为 4 。示例 2 :输入:arr = [2,4,6]输出:0解释:所有子数组为 [[2],[2,4],[2,4,6],[原创 2022-04-18 22:32:48 · 934 阅读 · 0 评论 -
198. 打家劫舍. 面试题 17.16. 按摩师(动态规划)
面试题 17.16. 按摩师难度简单233一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。注意:本题相对原题稍作改动示例 1:输入: [1,2,3,1]输出: 4解释: 选择 1 号预约和 3 号预约,总时长 = 1 + 3 = 4。示例 2:输入: [2,7,9,3,1]输出: 12解释: 选择 1原创 2022-04-10 21:46:21 · 84 阅读 · 0 评论 -
5. 最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。示例 2:输入:s = "cbbd"输出:"bb"题解:1.暴力枚举从头左开始和右对比;class Solution { public String longestPalindrome(String s) { int len=s.length(); if(len<2..原创 2022-04-04 22:37:56 · 198 阅读 · 0 评论 -
871. 最低加油次数
难度困难汽车从起点出发驶向目的地,该目的地位于出发位置东面target英里处。沿途有加油站,每个station[i]代表一个加油站,它位于出发位置东面station[i][0]英里处,并且有station[i][1]升汽油。假设汽车油箱的容量是无限的,其中最初有startFuel升燃料。它每行驶 1 英里就会用掉 1 升汽油。当汽车到达加油站时,它可能停下来加油,将所有汽油从加油站转移到汽车中。为了到达目的地,汽车所必要的最低加油次数是多少?如果无法到达目的地,则...原创 2022-03-31 23:01:14 · 95 阅读 · 0 评论