数位DP总结

数位DP基于动态的思想,记录状态以至于不用重复的计算,能够处理大规模的数

其时间复杂度为O(状态数*转移数) //状态数是dp数组的大小,转移数是for循环大小(这个时间我也不是很想得通,某大佬讲的。。)


比较简单的几种题型:

1): 求l~r数字中包含某些数字特征的数量和(如数字子串中是否有13等) HDU 2089 不要62

2):求l~r数字中各个位数相加能够整除某个数的数量和(如123各位置的数相加为6,判断是否能整除2)

3):求l~r数字中能形成回文串的数量和   LightOJ 1205

4):求l~r数字中能被某数整除的数量和   HDU 3652 B-number


不那么简单的几种题型(大佬无视我):

1):在形成回文串的基础上还要求是先非递增再非递减(等凹性质)   2017广东工业大学程序设计竞赛决赛-G题-等凹数字

2):要求数字能够整除每一位的数字   (此题需要离散,而且初始化不能为0。。)   Codeforces 55D - Beautiful numbers

有待更新。。


小细节;  

1:对于初始化数组,首先不需要每组数组都初始化,只需要在一开始初始化就可以了,但是如果只初始化一次呢,在把数据放进DP数组里的时候,应当先判断是否为!p,

不然就有可能导致dp数组存的并不是枚举0~9的所有可能的数据,而导致下一组数调用到了这个数据(实质是错的)。

2:初始化数据,记得初始化为-1!!!,不然就有可能导致算重而增加了时间复杂度了,因为DP数组存的数也有可能是0,如果你初始化为0,即使存了0也会被认为没算。

3:未完待续~

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值