前言:
y总的数位DP视频的题也完了。
过程中五味杂陈。
y总讲的很好,看了他对第一道题的讲解,后面基本都靠自己做出来了,毕竟都是一个套路,除了最后一题抓了一天的虫子,就是搞不懂为啥我 > 10^9的数据就开始错,迫不得已继续看y总视频,学到了很多,发现自己没有考虑不同模数的影响,导致错误。
说下数位DP吧,嘤嘤嘤扯远了。
套路:
前缀和思想,求1 - R合法的答案 减去 1 - L合法的答案就行了。
求解过程,一定要 细 心
一般思考过程
从高位考虑到低位假设这一位是an,那么你可以直接求这一位是0 ~ an - 1 的答案,这个一般要DP预处理,很快就能求出来,然后在考虑这一位为an的情况,时次位的情况,最后再考虑下这个数本身的贡献就行。
如下图(y总视频里的)
上面那个就是个模板,题目难度全靠DP预处理提上去,这个难点的就会考虑一点数学了,比如题目恨7不成妻
然后写的时候有两个技巧
-
答案错误的时候,可以先从头到尾浏览下代码整体上有无问题,之后可以先从小的数据开始调试,看看自己到底哪里没有考虑到
-
有的DP数组很长,导致状态转移方程打起来又长不好写,所以嘛可以来个 &(学习y总的) 比如
auto &it1 = f[i][j][ ( l + j ) % 7][( j * key7[i] + m) % 7];
通过这个你就直接拿 it1 来状态转移就行了,不然数组太长了
过程中发现有一道题和今年蓝桥杯省赛一毛一样,而且还更简单了
怒 😦
蓝桥杯的比这题还简单,只考虑B是1。
其实打蓝桥杯的前2天我打的一场牛客就是用数位DP的思想做的,虽然正解不是,and当时还不知道这个是数位DP,结果国赛一看,这不是按我那个做法就行吗? 大喜 😃 ,结果当时不会用DP预处理组合数,用阶乘求的,最后一些点数据大就溢出了,假了嘤嘤嘤,说实话G异或变换也是那几天刚做过基本一样的题目,一看就知到循环节,结果还是没有理解本质,非要搞个map来存,最后几个点肯定也没了,好好的O(N)变O(logN),人傻了,比赛结束,发现自己B题目没有注意到是素数的前提,5分捐了,靠 😦。
等比赛出结果只是个国二