![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DP
SSL_LHNB
Violence Works Wonders
展开
-
Ybtoj 数位DP.A B数计数
Description我们称十进制形式包含子字符串13,并且可以被 13 整除的数为B数。例如, 130 和 2613 就是B数,而 143 和 2639 不是。您的任务是计算1到n之间的B数个数。思路数位DP的模板题,当然用数位DP做啦!(大佬勿看)由于有“整除”与“包含13”这两个条件,因此我们考虑在DP中增加两维。设f[pos][re][op]表示,当前由最高位填到第pos位(还未填)时,%13的余数为re,包含13的情况为op。(其中,op=2表示当前数已包含13,op=1表示当前数以1原创 2022-01-08 10:47:59 · 313 阅读 · 0 评论 -
来自学长的快乐AK题——Day1 A
A——快乐区间动规Description定义操作a(X)b= ((a&b) + (a|b))>>1给出n个数ai每次用操作合并任意相邻ai求进行n-1次操作以后可能得到的最终结果所有结果从小到大输出思路考虑区间DP,设fi,j,k表示区间i~j能否通过合并得到数字k,为1则能,为0则否。考虑如何转移。用区间DP的老套路,枚举分割点g,将区间i~j分割为区间i~g和区间g+1~j,将两个小区间的状态合并得到大区间的状态。对于任意状态fi,g,p和fg+1,j,q,若两者原创 2021-08-13 08:17:56 · 72 阅读 · 0 评论 -
来自学长的快乐AK题——Day4 B
B——背包问题Description每次真香对下一次真香有影响思路不会有人看不出这是背包吧。。。对于每次真香(其实就是删除一个商品),如果我们每次将这个商品删除后再进行一次背包,显然会爆TLE,并且其中的很多值其实并没有被修改,十分浪费。考虑如何优化。将一个一个的删除转换为一个一个添加,将商品按照被删除的倒序进行背包(还未进行背包的商品相当于是被删除的),这样就只需要一次背包。代码#include<iostream>#include<cstdio>#includ原创 2021-08-12 22:03:26 · 71 阅读 · 0 评论 -
来自学长的快乐AK题——Day3 C
C——线段树+DPDescription有n个木桩依次排列,第i个木桩的高度为hi,其上的果冻数量为xi。开始的时候可以选择站在任意一个木桩上,每次跳跃不限长度而且只能从左向右跳跃,但只能跳到高度与当前所站高度差绝对值小于等于m的柱子上。问最多能拿到多少个果冻。最终不一定要落在最后一个木桩上。思路由于题目中提示异常明显:只能从左向右跳跃,因此这道题显然为DP题。设fi表示到了高度i能获得的最大果冻数。考虑任意木桩i,能转移到f[h[i]]的状态范围为f[h[i]-m~h[i]+m],我们显然原创 2021-08-12 21:21:58 · 72 阅读 · 0 评论 -
来自学长的快乐AK题——Day3 A
A——线段树+01背包Description有n个信号,第i个信号强度为bi(可能<0)。总体强度为各操作信号的强度之和。为保证信号强度需要删除某些信号。有m个操作人员,第i个人只会删除编号在Li和Ri之间的信号,每删除一个信号,花费ci格能量。飞船一共有k格能量。问在队友删除完信号后,总体强度最大是多少。思路很明显的背包吧,难点就是如何将这个题目转化成背包。由于人可以重复使用,而信号只能被删除一次,所以我们考虑将信号转换为物品进行01背包。显然对于每个信号来说,最优的费用就是所有原创 2021-08-12 21:20:14 · 57 阅读 · 0 评论 -
洛谷P1233 木棍加工
题目描述一堆木头棍子共有n根,每根棍子的长度和宽度都是已知的。棍子可以被一台机器一个接一个地加工。机器处理一根棍子之前需要准备时间。准备时间是这样定义的:第一根棍子的准备时间为1分钟;如果刚处理完长度为L,宽度为W的棍子,那么如果下一个棍子长度为Li,宽度为Wi,并且满足L>=Li,W>=Wi,这个棍子就不需要准备时间,否则需要1分钟的准备时间;计算处理完n根棍子所需要的最短准备时间。比如,你有5根棍子,长度和宽度分别为(4, 9),(5, 2),(2, 1),(3, 5),(1, 4)原创 2021-05-15 17:02:24 · 259 阅读 · 0 评论