
数位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 · 586 阅读 · 0 评论 -
2017广东工业大学程序设计竞赛决赛-G题-等凹数字
这题在求回文串的基础上还要等凹。可以视为LightOJ 1205的升级版,不知道如何写回文串的数位DP可以打开链接LightOJ 1205因为这题只需要加多2维,最高位的数字以及前一位(用于判断升降) (此思想来自于点击打开链接)在回文串的前半部分不能大于pre,后半段不能小于pre。然后最后判断是否全为一个数字就可以了。#pragma comment(linker,原创 2017-03-29 12:35:13 · 777 阅读 · 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 · 451 阅读 · 0 评论 -
HDU 2089 不要62
很裸的数位DP,只需要dfs的时候维护dt状态值就行了dt==2 说明此数字不吉利dt==1 说明有6没2dt==0 说明到dex位此数字还是吉利的代码如下~#include #include #include #include #include #include #include #include #define INF 0x3f3f3原创 2017-04-02 21:56:04 · 481 阅读 · 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 · 423 阅读 · 0 评论 -
数位DP总结
数位DP基于动态的思想,记录状态以至于不用重复的计算,能够处理大规模的数其时间复杂度为O(状态数*转移数) //状态数是dp数组的大小,转移数是for循环大小(这个时间我也不是很想得通,某大佬讲的。。)基本模板如下:基本的三种题型:1): 求1~n数字中包含某些数字特征的数量和(如数字子串中是否有13等)2):求1~n数字中各个位数相加能够整除某个数的数量和(如123各原创 2017-04-03 20:58:42 · 1651 阅读 · 1 评论