10 2019 档案

摘要:这题有两个做法:并查集和二分图匹配。 方案一:并查集 因为有矛盾值,所以显然需要排序:将矛盾值从小到大排序。 两个人a,b有仇,那么把他们放在一起显然会打起来,那么我们还不如把a与b的其他敌人放在一起, 因为这样可能会出现“敌人的敌人就是朋友”的情况,恰好a与b的其他敌人之间没有矛盾,那么他们就可以 阅读全文
posted @ 2019-10-28 07:27 逐梦——无畏 阅读(200) 评论(0) 推荐(0)
摘要:首先推荐一篇对我非常有益的BOLG。 这一题分两个部分最小值和最大值,做法本质相同。结构体node中的v记录的是价值,pos记录的是位置,h代表队头指针,t代表队尾指针,h和t在两个部分是分别独立的,所以要分别赋初值,这是实现单调队列的第一题,不怎么会口糊。 阅读全文
posted @ 2019-10-26 09:58 逐梦——无畏 阅读(202) 评论(0) 推荐(0)
摘要:原来这样区间查询的题目原来是要用线段树的,但是…… 这题可以用ST表(RMQ) 阅读全文
posted @ 2019-10-22 20:40 逐梦——无畏 阅读(82) 评论(0) 推荐(0)
摘要:这题的考点涉及了高精度(乘法)模拟和动态规划。 状态设计:dp[i][j]这个结构体表示在i个数中间放j个乘号的最大结果。 转移方程:我们需要枚举最后一个乘号是在哪里放的,直接计算一下最后一个乘号之前的数字加入k-1个乘号时的最大值,再乘以最后一个乘号之后的数字。 高精在这题有这几个应用: 1.取数 阅读全文
posted @ 2019-10-22 20:21 逐梦——无畏 阅读(116) 评论(0) 推荐(0)
摘要:DP+贪心。 根据开始时间先后排序。 第i时刻的最大空闲时间是和后面i+选择任务的持续时间的时刻有关系的,那么,正着找肯定是不行的,我们来试一下倒着搜。 状态表示:dp[i]代表往前推到i时的最大空闲时间。 转移方程: (1)本时刻无任务 dp[i]=dp[i+1]+1; //继承上一个时刻的最大空 阅读全文
posted @ 2019-10-22 20:01 逐梦——无畏 阅读(99) 评论(0) 推荐(0)
摘要:这题画风清奇,与这题相似。 状态设计:dp[step][i][j]代表已经走了step步,第一条路末尾在i行,第二条路末尾在j行。因为记录了步数,便得第一条路末尾在(step-i)列,第二条路末尾在(step-j)列。 转移方程:如果i==j那么(step-i)==(step-j),得两条路末尾处于 阅读全文
posted @ 2019-10-22 19:52 逐梦——无畏 阅读(166) 评论(0) 推荐(0)
摘要:这题是依赖背包。 首先说明分组背包和依赖背包的区别:“分组背包”=“依赖背包”-“01背包”。 至于预处理可以参见分组背包的处理方法。 设计状态:dp[i]代表花费i元可以获得的最大价值。 转移方程:因为“分组背包”=“依赖背包”-“01背包”,所以“金明的预算方案”=“依赖背包”=“01背包”+“ 阅读全文
posted @ 2019-10-22 19:36 逐梦——无畏 阅读(153) 评论(0) 推荐(0)
摘要:既然我放在动态规划这个分类,不是动态规划是什么??? 既然没有规定乌龟卡的使用顺序,那么用桶排,sum[i]记录i类卡的张数。 状态设计:当数据范围不大,并且情况不多的题,可以试试每一维记录一个元素的状态。dp[a][b][c][d]代表用了a张1类牌,b张2类牌,c张3类牌和d张4类牌时可以获得的 阅读全文
posted @ 2019-10-22 19:23 逐梦——无畏 阅读(131) 评论(0) 推荐(0)
摘要:这题就是二维前缀和。 阅读全文
posted @ 2019-10-22 13:27 逐梦——无畏 阅读(112) 评论(0) 推荐(0)
摘要:这题是完全背包啊。 与众不同的是它是用背包取的最小值,所以边界条件有讲究:dp[0]=0,其他的赋值为inf(无穷大),这样方便取min操作。 阅读全文
posted @ 2019-10-22 13:26 逐梦——无畏 阅读(94) 评论(0) 推荐(0)
摘要:这题用堆的思路来模拟。因为不会用堆去重所以只是借鉴思路来模拟。 这题还有的就是序数词的输出,个位是1,2,3,十位是1的时候进行特判。 兼顾时间复杂度所以在预处理中打个表。 阅读全文
posted @ 2019-10-22 13:22 逐梦——无畏 阅读(104) 评论(0) 推荐(0)
摘要:这题是动态规划。 状态设计:很经典的设计dp[i][j]表示从i个物品中选择j个物品来搬运的最小劳累度,很自然的想到答案便是dp[n][k]。 转移方程:因为疲劳度是关于两个物品的,转移的条件就是i选和不选,假设i不选,那么就是前i-1个选j对,也就是dp[i][j]=dp[i-1][j].假设第i 阅读全文
posted @ 2019-10-22 13:14 逐梦——无畏 阅读(78) 评论(0) 推荐(0)
摘要:这题属于最大不连续字段和。 因为它是二维的所以把第i行做一次线性dp,压成dp[i]来储存,再在dp数组中做一次最大不连续字段和求答案就好啦,一道二维的题目,秒变一维的。 状态表示:dp[i]代表第i行在做最大不连续字段和的最终值。 转移方程:当i大于2——如果dp[i]从它的前一位转移而来那么它的 阅读全文
posted @ 2019-10-22 12:58 逐梦——无畏 阅读(82) 评论(0) 推荐(0)
摘要:背包问题的模板,以后可以背下来套用噢。 但是更多的时候要像 传送门 一样有转换的过程 阅读全文
posted @ 2019-10-21 20:31 逐梦——无畏 阅读(97) 评论(0) 推荐(0)
摘要:这是动态规划的分组背包 阅读全文
posted @ 2019-10-21 20:06 逐梦——无畏 阅读(185) 评论(0) 推荐(0)
摘要:这是动态规划之01背包。 与01背包所不一样的是它的花费价值是浮点型的,所以状态改为dp[i]代表获得i的价值需要(double)dp[i]的代价,由此可知得到答案时反向遍历(优化时间复杂度),并且输出的是i这个变量。 这题计算的是概率,所以dp更新时用乘法而不是加法。 阅读全文
posted @ 2019-10-21 19:24 逐梦——无畏 阅读(91) 评论(0) 推荐(0)
摘要:这是一题模拟加桶排。 先分支判断是行相邻还是列相邻,再用2个数组分别存储行和列的过道可以隔开多少对,找出可以隔开的最多的过道,并输出。 阅读全文
posted @ 2019-10-21 14:29 逐梦——无畏 阅读(124) 评论(0) 推荐(0)
摘要:这题是动态规划,贪心和排序。 状态表示:d[i]表示前i位的最长满足要求子序列的长度。 状态转移:当重量严格大于前一只并且速度严格大于前一只的时候更新转移数组 d[i]=max(d[i],d[j]+1); 因为不仅要求输出最长的子序列的长度,还要求输出编号,就注意推理,为了减少时间复杂度把小老鼠的体 阅读全文
posted @ 2019-10-21 12:56 逐梦——无畏 阅读(73) 评论(0) 推荐(0)
摘要:这题是动态规划之多重背包。 状态表示:dp[i]表示花费i元可以获得的最重粮食重量 阅读全文
posted @ 2019-10-21 12:48 逐梦——无畏 阅读(104) 评论(0) 推荐(0)
摘要:这题是动态规划,枚举 状态表示:dp[i][j]代表从(1,1)走到(i,j)位置可以获得的最多幸运值 转移方程:(1)如果i==1并且j==1幸运值就为a[i][j]的本身 (2)如果i-1>0 dp[i][j]=max(dp[i][j],dp[i-1][j]+a[i][j]); (3)如果j-1 阅读全文
posted @ 2019-10-21 12:41 逐梦——无畏 阅读(80) 评论(0) 推荐(0)
摘要:这题是动态规划,需要:打表,字符数组,动态规划。 状态表示:dp[i][j][k]表示的是有i个A,j个B和k个C满足要求的有多少种 转移方程:dp[i][j][k]=dp[i-1][j][k]+dp[i][j-1][k]+dp[i][j][k-1] 边界:dp[0][0][0]=1; 因为会暴in 阅读全文
posted @ 2019-10-21 12:27 逐梦——无畏 阅读(135) 评论(0) 推荐(0)