随笔分类 -  DP

摘要:题目传送门 题解: id[ i ][ j ] 代表的是在第j个位置之后的第i个字符的位置在哪里。 dp[ i ][ j ][ k ] 代表的是 第一个串匹配到第i个位置, 第二个串匹配到第j个位置, 第三个串匹配到第k个位置之后,最后面一个字符的位置在哪里。 如果题目只询问一次,那么应该很容易想到n 阅读全文
posted @ 2019-04-30 16:51 Schenker 阅读(426) 评论(0) 推荐(0)
摘要:题目传送门 题意:现在有n座山峰,现在 i-1 与 i 座山峰有 di长的路,现在有m个宠物, 分别在hi座山峰,第ti秒之后可以被带走,现在有p个人,每个人会从1号山峰走到n号山峰,速度1m/s。现在你可以安排好这p个人的出发时间,问所有宠物的等待时间是多少。 题解: 斜率优化DP 我们知道一个人 阅读全文
posted @ 2018-12-04 17:09 Schenker 阅读(130) 评论(0) 推荐(0)
摘要:这个题目中 斜率优化DP相当于存在一个 y = kx + z 然后给定 n 个对点 (x,y) 然后给你一个k, 要求你维护出这个z最小是多少。 那么对于给定的点来说 我们可以维护出一个下凸壳,因为如果存在一个上突壳的话,那么上突壳的点是一定不会被选上的。 所以对于解来说,只有下凸壳的点再会被选到。 阅读全文
posted @ 2018-12-03 16:10 Schenker 阅读(142) 评论(0) 推荐(0)
摘要:题目传送门 题意:现在有n个电话号码,每个电话号码为si,拨打次数为pi。 现在有k 个快捷键,每次拨打号码之前可以先按一次快捷键,然后再输入数字,现在问输入数字次数是多少。快捷键的号码可以不在电话簿上。 题解: 先构建一个字典树,然后在字典树上进行DP。 dp[x][rem][fa] x -> 节 阅读全文
posted @ 2018-12-02 12:05 Schenker 阅读(285) 评论(0) 推荐(0)
摘要:Hills And Valleys 题意:给你一个序列, 可以翻转一次区间 [l, r] 求最大 非递减的 序列长度。 题解:枚举翻转区间,然后匹配。 如果不翻转区间, 那么就相当于用b[] = {0,1,2,3,...,7,8,9} 来匹配原序列, 可以重复匹配, 求最长的长度。 现在我们假设翻转 阅读全文
posted @ 2018-08-09 10:32 Schenker 阅读(279) 评论(0) 推荐(1)
摘要:题意: 有n种商品,每种商品有一个价格 p[i] 。 每种商品都有2种打折方式: 1. 给你优惠 d[i] 元。 2. 免费送你第 f[i] 种饮料。 现在求每种饮料至少一瓶的最小花费。 dp[i][0] 表示 i 的子树内所有的饮料都至少买了一瓶。 dp[i][1] 表示 i 的子树内所有的饮料都 阅读全文
posted @ 2018-07-26 10:30 Schenker 阅读(321) 评论(0) 推荐(0)
摘要:Rain and Umbrellas 题意:某同学从x=0的点走到x=a的点,路上有几段路程是下雨的, 如果他需要经过这几段下雨的路程, 需要手上有伞, 每一把伞有一个重量, 求走到重点重量×路程的最小花费。 题解:暴力,如果某段路程需要带伞,就直接去找前面有伞的地点,如果不需要伞就直接往后走就好了 阅读全文
posted @ 2018-06-03 15:05 Schenker 阅读(124) 评论(0) 推荐(0)
摘要:Pencils and Boxes 题意: n支铅笔,每只笔有一个颜色值, 无限个盒子, 如果一个盒子里面放笔的话, 就至少需要k支笔装在一起,并且一个盒子里面的笔的颜色值只差 不能大于 d。如果满足条件就输出YES,不满足就输出NO 题解: 对于这一条直线来说, B,C的长度为K+1, && va 阅读全文
posted @ 2018-05-22 23:32 Schenker 阅读(250) 评论(0) 推荐(0)
摘要:Harbinger vs Sciencepal 题意:给你n对人, 每一对都有2个人,每个人分别有一个值, 现在将每队人拆开塞入2组,要求分完这n对人之后,2个组的差值最小。 题解:将每队人的差值算出来,并且对于差值求和 tot, 然后这个题目就变成了给你n个数, 分成2组, 求差值最小的题目, 对 阅读全文
posted @ 2018-04-24 16:54 Schenker 阅读(190) 评论(0) 推荐(0)
摘要:Ada and Coins 题意:钱包里有n种钱,然后有m次询问,询问[l,r]区间内能被表示的个数有几个。 题解:这道题是群主推荐我写的,然后让我用bitset去写,他说 操作32个bitset需要的时间 == 操作一个int所需要的时间, 所以有些题目用bitset去处理就能快了。 这道题目的思 阅读全文
posted @ 2018-04-24 16:19 Schenker 阅读(142) 评论(0) 推荐(0)
摘要:Timetable 题意:ivan 是一个学生, 他们当地一周有n天, 每天有m节课,每节课一小时, 然后‘1’代表的是ivan这个时间段需要上课, 现在ivan可以跳过选择K节课不去上, 他在学校的时间为当天他选择的第一节课到当天的最后一节课,也就是可以跳2端的课, 如果当天的没有课, 当天就不需 阅读全文
posted @ 2018-03-09 15:42 Schenker 阅读(274) 评论(0) 推荐(0)
摘要:Game with String 题意:有一个字符串,可以选择从第K位开始,将[K,len(s)-1]的字符都移到前面去,现在给你一个首字母,你可以再选择一位进行观察,然后猜测这个K的值是多少, 现在要求求出能猜对K的概率是多少。 题解:处理出每一个字母开头的第K位是什么字符, 如果这个字符在这个字 阅读全文
posted @ 2018-03-07 16:31 Schenker 阅读(235) 评论(0) 推荐(0)
摘要:HihoCoder - 1617 (从群主那里借鉴来的, 群主好强啊) 题意:中文题不解释。。。 题解: dp[X][i][j] 代表的是X是坐标之和 第一个人 走到位置 dp[i][x-i] 第二个人 走到位置 dp[j][x-j] 所到达的最大值。 然后 dp[x][i][j] 可以从 dp[i 阅读全文
posted @ 2018-03-04 16:33 Schenker 阅读(157) 评论(0) 推荐(0)
摘要:The Bakery 题意:将N个数分成K块, 每块的价值为不同数字的个数, 现在求总价值最大。 题解:dp[i][j] 表示 长度为j 且分成 i 块的价值总和。 那么 dp[i][j] = max(dp[i-1][x]+右边的数的贡献) ( 1<=x < j )。 如果每次都从左到右for过去一 阅读全文
posted @ 2018-03-03 20:16 Schenker 阅读(145) 评论(0) 推荐(0)
摘要:Cashback 题意:一共给你N个数, 然后将他们分成连续的子集, 每个集合可以删除 元素个数/c 个最小元素, 然后求每个集合删除元素后的总和。 题解:我们将集合分为1个元素或者K个元素,每K个元素查询一下最小值,然后找到最小值, 然后 dp一下就可以找到最后的结果 emmm, 当时CF的时候题 阅读全文
posted @ 2018-03-02 21:11 Schenker 阅读(209) 评论(0) 推荐(0)
摘要:Population Size 题意: 一共n个数, 每个-1都可以变成一个正数, 现在要求最少数目的等差子序列,并且在这个子序列必须要连着截取一段,不能分开截取。 样例1: 8 6 4 2 1 4 7 10 2 可以分成 { 8 6 4 2} {1 4 7 10 } {2} 3个等差子序列。 题解 阅读全文
posted @ 2018-02-12 20:29 Schenker 阅读(360) 评论(0) 推荐(0)
摘要:Dima and Salad 题意:一共有n种水果,每种水果都有一个ai, bi,现求一个最大的ai总和,使得ai之和/对应的bi之和的值等于K。 题解:将bi转换成偏移量,只要偏移到起点位置,就代表左右偏移抵消了,就满足题意了,注意一点的是这个跑法和01背包的恰好消耗是一样的初始化方法,将起点设为 阅读全文
posted @ 2018-02-07 15:06 Schenker 阅读(199) 评论(0) 推荐(0)
摘要:题目:Substring 题意:给你一个有向图, 一共有n个节点 , m条变, 一条路上的价值为这个路上出现过的某个字符最多出现次数, 现求这个最大价值, 如果价值可以无限大就输出-1。 题解:当这个有向图构成一个环的时候就会使得值无限大,所以先用拓扑排序判断一下有没有环,如果有环直接输出-1, 如 阅读全文
posted @ 2018-02-01 19:31 Schenker 阅读(260) 评论(0) 推荐(0)