数位DP
DIDCJS
自律给予自由
展开
-
LightOJ 1205
关键维护三个变量start,dex,flag,分别代表开始位,当前位,开始位到当前位是否回文。#pragma comment(linker, "/STACK:1024000000,1024000000") #include #include #include #include #include #include #include #include #inclu原创 2017-03-29 12:15:11 · 532 阅读 · 0 评论 -
2017广东工业大学程序设计竞赛决赛-G题-等凹数字
这题在求回文串的基础上还要等凹。 可以视为LightOJ 1205的升级版,不知道如何写回文串的数位DP可以打开链接LightOJ 1205 因为这题只需要加多2维,最高位的数字以及前一位(用于判断升降) (此思想来自于点击打开链接) 在回文串的前半部分不能大于pre,后半段不能小于pre。 然后最后判断是否全为一个数字就可以了。 #pragma comment(linker,原创 2017-03-29 12:35:13 · 732 阅读 · 0 评论 -
HDU 3652 B-number
此题在询问包含13的基本上还要求此数要整除13(如果连询问包含13的数位都不会的话,建议先看看更基础的这题 HDU 2089 不要62) 对于能否整除13,我们只需要在dfs的时候维护一个%13的数(num),然后在每次枚举下一位的时候num=(num*10+i)%13 最后只需要判断余数是否为0就可以了。 至于为什么可以这么做,因为:123=((1*10+2)*10+3)原创 2017-04-02 22:24:41 · 416 阅读 · 0 评论 -
HDU 2089 不要62
很裸的数位DP,只需要dfs的时候维护dt状态值就行了 dt==2 说明此数字不吉利 dt==1 说明有6没2 dt==0 说明到dex位此数字还是吉利的 代码如下~ #include #include #include #include #include #include #include #include #define INF 0x3f3f3原创 2017-04-02 21:56:04 · 440 阅读 · 0 评论 -
Codeforces 55D - Beautiful numbers
能注意到1~9的最小公倍数是2520, 所以我们只需要维护一下到dex位前的数字组成的lcm,和num 最后只需要判断num是否除以lcm就可以了 但是DP[20][2555][2555] 是要超内存的 所以我们需要离散一下第二维,因为1~9组成的lcm的数量其实很有限(思考怎么算出所有的lcm) 所以需要新建Hash[50]数组压DP[20][50][2555]; 还要此题有一个最坑原创 2017-04-03 19:03:32 · 348 阅读 · 0 评论 -
数位DP总结
数位DP基于动态的思想,记录状态以至于不用重复的计算,能够处理大规模的数 其时间复杂度为O(状态数*转移数) //状态数是dp数组的大小,转移数是for循环大小(这个时间我也不是很想得通,某大佬讲的。。) 基本模板如下: 基本的三种题型: 1): 求1~n数字中包含某些数字特征的数量和(如数字子串中是否有13等) 2):求1~n数字中各个位数相加能够整除某个数的数量和(如123各原创 2017-04-03 20:58:42 · 1561 阅读 · 1 评论