转载:数位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 ...
随机推荐
- Python 逻辑行/物理行
物理行是你在编写程序时所看见的. 逻辑行是Python看见的单个语句.Python假定每个物理行对应一个逻辑行 . 默认地,Python希望每行都只使用一个语句,这样使得代码更加易读. 如果你想要在一 ...
- txt文件的读取
两个函数:textread或importdata [textread函数] 格式:I=textread('文件名.txt','列',读取的行数,'headerlines',跳过的头行数); 返回值I ...
- Iphone CPU 架构类型
armv6设备:iPhone, iPhone2, iPhone 3G,第一代.第二代iPod Touch armv7设备:iPhone 3GS, iPhone 4, iPhone 4S iPad , ...
- 玩玩RMI
今天在看代理设计模式,java中远程代理的实现一定会用到RMI的,很久没有温习过RMI的知识了,今天就重新过一遍这个知识点来让自己加深印象,构建一个简单的RMI小程序需要用到一下几个类: java.r ...
- delphi 中sql的语法规范
1.引号配对: 这是在Delphi使用SQL语句时容易出错的地方,由于delphi规定在字符串中用两个西文的单引号“''”表示一个“'”,在拼装语句的时候就容易疏忽遗漏. Delphi里有个函数Q ...
- 使用 mulan-1.5.0 如何构造.arff文件
1. 为什么要使用mulan 我用mulan来做多标签数据的分类,但是mulan的输入数据由两个文件控制,一个是data.arff文件,这个文件列出的所有的属性以及这些属性值的类型和他们对应的值.la ...
- LeetCode OJ 229. Majority Element II
Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The algorit ...
- From windows live writer
天线数据长度: 4*14*9664*4 = 2164736 信道估计长度: 614400 均衡: 12*1200*4 = 57600
- DLNA
DLNA最早由索尼.英特尔.微软等提出,全称是DIGITAL LIVING NETWORK ALLIANCE,旨在解决个人PC,消费电器,移动设备在内的无线网络和有线网络的互联互通,其实就是解决电脑和 ...
- 解决curl中errno为51和60的错误
今天使用curl调用https接口的时候,发现接收不了数据 然后打印出curl_errno和curl_error发现是60错误,而生产环境是51错误 查了相关资料 加上两个参数就可以了 curl_se ...