摘要:
这道题的数位dp是二维的,我们可以把这个问题抽象成在0-S中满足题目条件的两个数的个数,因此可以进行二维的数位dp,从这题我们发现无需记录前缀状态 只需考虑两个flag看是否大于原数,并且两个数不能都是1,而且当i是1,n不能是0. 最后算出的答案并不是全部答案,因为还有i<=j的情况,我们知道这两 阅读全文
摘要:
CDQ分治付出了log的时间代价来使静态的三维偏序问题转化成了二位偏序问题后用用树状数组维护 所谓三位偏序就是a<=a1,b<=b1,c<=c1这种情况,我们将第一维当作时间轴,之后排序来树状数组 这道题是模板题 #include<algorithm> #include<iostream> #inc 阅读全文
摘要:
首先我们发现打的顺序一定是连续的,不然会浪费一次爆炸的机会,比如我打了x 不可能去打 x-1,因为这样x-1的爆炸用不到甚至有可能x-1不会被别的爆炸影响 比如我打了x 不可能直接打 x+2,因为这样x+1的位置最后一定要打但是他打完的爆炸就用不到了 因此我们枚举第一次打的位置,然后计算其他剩下的被 阅读全文
摘要:
这里只需先转化乘二进制后,记录前面有几个0和几个1,并且记录前导0状态,因为前导0会影响答案 #include<iostream> #include<algorithm> #include<cstring> #include<cstdio> #include<map> #include<string 阅读全文
摘要:
这题目最原始的想法我们先对序列排序,发现每个数的贡献其实就是先找到比他小的数的个数记为cnt 然后枚举这个数所在的位置,之后就可以从cnt中选j-1个填到前面,然后还要进行排列 但是这样超过了复杂度,所以我们考虑优化这个组合数表达式,首先是简单的约分 约后,我们发现上下两个阶乘中间的数相减就是一个常 阅读全文
摘要:
这道题的关键是有两个限制,1个是递增,1个是异或 那么如果我们要求递增,则i和i-1的最高位不能相同,因为这样bi就被异或导致失去最高位 因此我们知道最高位相同的数是冲突的,所以我们求取最高位为i的个数是多少个 我们发现答案是 2i 2^(i+1)-1这个区间内的数都可以,那么取值就是取值就是相减+ 阅读全文
摘要:
对于一类构造题来说。都是先找出不能构造的情况,之后再思考构造 在这题当中,如果这个k能够在最小构造次数和最大构造次数之间那就可以构造 现在的问题是如何找到最小和最大。题目说的翻转,我们不如把他看作交换,这样最小的情况其实就是一次交换一次,也就是逆序对的数量 最大的情况就是每次都把所有可以交换的交换掉 阅读全文
摘要:
这道题可以看出与花色无关,甚至与数值无关,我们只需要记住前一个放的值和现在放的不一样就行了 又因为这是一个计数问题,所以我们还要知道前一个值放了之后,有多少种会不符合答案,再算的时候就要去掉他们 因此我们设计状态f[][][][][],表示一张牌,一对牌,三张牌,四张牌同色的个数,然后再枚举一维k表 阅读全文
摘要:
我们想要求某一个真正的序列,很多情况下都是用试填法来求取,填一个数上去看看是否满足条件。 所以我们要知道以如果填当前数,那么以当前数为首的剩下的数和c的关系。所以我们知道要预处理出所有满足条件的数的个数,也就是计数问题。 很自然的,前两位要设计为i个数,第一位,也就是最左边这位填的数是第j大,为什么 阅读全文
摘要:
这道题有意思的地方是,他要求提前决策,不能实时决策,这个意思是,我们不能记录当前点是否成功的状态,而只能记录是否申请的状态。 这道题比较明显的状态是f[][][],前i个,申请了j次,第i个有无申请。 但是我想通过记忆化搜索来做,因此将这个状态设计为前i-1个,申请了j次,第i-1个有无申请。这样初 阅读全文