转载:数位DP模板
// pos = 当前处理的位置(一般从高位到低位)
2 // pre = 上一个位的数字(更高的那一位)
3 // status = 要达到的状态,如果为1则可以认为找到了答案,到时候用来返回,
4 // 给计数器+1。
5 // limit = 是否受限,也即当前处理这位能否随便取值。如567,当前处理6这位,
6 // 如果前面取的是4,则当前这位可以取0-9。如果前面取的5,那么当前
7 // 这位就不能随便取,不然会超出这个数的范围,所以如果前面取5的
8 // 话此时的limit=1,也就是说当前只可以取0-6。
9 //
10 // 用DP数组保存这三个状态是因为往后转移的时候会遇到很多重复的情况。
11 int dfs(int pos,int pre,int status,int limit)
12 {
13 //已结搜到尽头,返回"是否找到了答案"这个状态。
14 if(pos < 1)
15 return status;
16
17 //DP里保存的是完整的,也即不受限的答案,所以如果满足的话,可以直接返回。
18 if(!limit && DP[pos][pre][status] != -1)
19 return DP[pos][pre][status];
20
21 int end = limit ? DIG[pos] : 9;
22 int ret = 0;
23
24 //往下搜的状态表示的很巧妙,status用||是因为如果前面找到了答案那么后面
25 //还有没有答案都无所谓了。而limti用&&是因为只有前面受限、当前受限才能
26 //推出下一步也受限,比如567,如果是46X的情况,虽然6已经到尽头,但是后面的
27 //个位仍然可以随便取,因为百位没受限,所以如果个位要受限,那么前面必须是56。
28 //
29 //这里用"不要49"一题来做例子。
30 for(int i = 0;i <= end;i ++)
31 ret += dfs(pos - 1,i,status || (pre == 4 && i == 9),limit && (i == end));
32
33 //DP里保存完整的、取到尽头的数据
34 if(!limit)
35 DP[pos][pre][status] = ret;
36
37 return ret;
38 } 转载自:http://www.cnblogs.com/xz816111/p/4809913.html
转载:数位DP模板的更多相关文章
- HDU 2089 不要62(数位dp模板题)
http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意:求区间内不包含4和连续62的数的个数. 思路: 简单的数位dp模板题.给大家推荐一个好的讲解博客.h ...
- POJ 3286 How many 0's(数位DP模板)
题目链接:http://poj.org/problem?id=3286 题目大意: 输入n,m,求[n,m]的所有数字中,0出现的总数是多少,前导零不算. 解题思路: 模板题,设dp[pos][num ...
- 数位dp模板 [dp][数位dp]
现在才想到要学数位dp,我是不是很弱 答案是肯定的 以一道自己瞎掰的题为模板 //题: //输入数字n //从0枚举到n,计算这n+1个数中含有两位数a的数的个数 //如12930含有两位数93 #i ...
- 51nod 1009 数字1的数量(数位dp模板)
给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数. 例如:n = 12,包含了5个1.1,10,12共包含3个1,11包含2个1,总共5个1. 数位dp的模板题 ...
- 51nod 1009 - 数字1的数量 - [数位DP][模板的应用以及解释]
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1009 基准时间限制:1 秒 空间限制:131072 KB 给 ...
- HDU - 4722 Good Numbers 【找规律 or 数位dp模板】
If we sum up every digit of a number and the result can be exactly divided by 10, we say this number ...
- 数位dp 模板加例题
概念:所谓数位"dp",是指对数字的"位"进行的与计数有关的DP.一个数一个位,十位,百位,千位等,数的每一位就是数位.数位DP用来解决与数字操作有关的问题.例 ...
- 【hdu6148】Valley Numer【数位dp模板题】
题意 对于每组数据给出一个整数n(length(n)<=100),找出不大于n的数字中有多少是Valley Numer.对于Valley的定义是它每一位的数字要么是递增,要么是递减,要么是先递减 ...
- HDU 3555 Bomb(数位DP模板啊两种形式)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555 Problem Description The counter-terrorists found ...
- HDU 2089 不要62 数位DP模板题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 参考博客:https://www.cnblogs.com/HDUjackyan/p/914215 ...
随机推荐
- Java 泛型 泛型代码和虚拟机
Java 泛型 泛型代码和虚拟机 @author ixenos 类型擦除.原始类型.给JVM的指令.桥方法.Java泛型转换的事实 l 类型擦除(type erasure) n Java泛型的处理 ...
- libmad编译
patch -Np1 -i ../libmad-0.15.1b-fixes-1.patch && sed "s@AM_CONFIG_HEADER@AC_CONFIG_HEAD ...
- Spring声明式事务配置中propagation各个值的意思
值 含义 REQUIRED 支持当前事务,如果当前没有事务,就新建一个事务. SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行. MANDATORY 支持当前事务,如果当前没有事务 ...
- HUST 1404 Hamming Distance(字符串)
Hamming Distance Description Have you ever heard of the Hamming distance. It is the number of positi ...
- POCO系列之——延迟加载
当我们进行查询的时候,哪些关系的数据将会被加载到内存呢?所有相关的对象都需要吗?在一些场合可能有意义,例如,当查询的实体仅仅拥有一个相关的子实体,但是,多数情况下,你可能只需要加载部分数据,或者你喜欢 ...
- iOS 数组字典操作
iOS开发中需要大量对dictionary和array进行操作,因此我们需要一种更加安全可靠的操作方法来避免不必要的crash.当然可以通过自定义dictionary 和array重载增删改查的方法来 ...
- Xcode7修改模块生成网络权限(ATS配置)
直接找 前往->前往文件夹->然后复制下面的路径填入框内,回车就能看到想要替换的文件夹了 /Applications/Xcode.app/Contents/Developer/Pla ...
- 调用Lua出错
错误提示:Could not load file or assembly 'lua51' or one of its dependencies. An attempt was made to load ...
- Python笔记2-20151023
一.循环 Python的循环有两种,一种是for...in循环,依次吧list或tuple中的每个元素迭代出来. >>>names = ['Michael','Bob','Tracy ...
- Echart图表相关配置项的设置
饼状图提示框单位显示 在{c}后面即可添加任意单位内容. 一条记录含有多组数据的柱状图单位显示 标注单位的显示. 目前还未找到方法实现,当鼠标移动到标注上时设置显示单位. 标线单位的显示