数位dp入门 hdu2089 不要62

题意: 给定一个区间[n,m] (0< n ≤ m<1000000),找出不含4和'62'的数的个数 (ps:开始以为直接暴力可以。。貌似可以,但是直接TLE了2333).其实是数位DP的入门题;

  • 初探数位DP:写的很详细(看完就不必看我的代码了..)
  • f[i,j]:位置长度为i以j开头的符合条件的数的个数;(一般的dp式子中,第二个参数依题意);这就直接可以推出f[i,j] = f[i,j] + f[i-1,k] ( j != 6 || k != 2)
  • 开始打表打出所有的f[i][k];之后就sum(a)计算小于a的符合要求的数的个数(相当于树状数组);里面从高位起,看小于a的情况数(只看高位),这就导致了当高位不符合
  • **范围计数详见sum();
#include<bits/stdc++.h>
using namespace std;
int f[][];
void init()
{
f[][] = ;
for(int i = ;i <= ;i++){
for(int j = ;j <= ;j++)
for(int k = ;k <= ;k++)
if(j != && (j != || k != ))
f[i][j] = f[i][j] + f[i-][k];
}
}
int sum(int a)
{
int digit[]={},len = ;
while(a){
digit[++len] = a % ;
a /=;
}
int ans = ,i,j;
for(i = len;i > ;i--){ //哪一位小于n;
for(j = ;j < digit[i];j++)//当j = 0时,代表了所有位数比n少的情况,即049,009均包括了,所以在后面出现的数其实是最高位和n相同的数;
if(j != && (j != || digit[i+] != ))
ans += f[i][j];
if(j == || (j == && digit[i+] == ))
break;
}
return ans;
}
int main()
{
init();
int a,b;
while(scanf("%d%d",&a,&b) == && a + b){
printf("%d\n",sum(b+) - sum(a));
}
}

用递归写起来更清爽,递归版本:

#include<bits/stdc++.h>
using namespace std;
int dp[][];
int bit[];
int dfs(int pos,int d,int on = )
{
if(pos == ) return ;
int ans = dp[pos][d];
if(!on && dp[pos][d] != -) return ans;
ans = ;
int e = (on? bit[pos]:);
for(int i = ;i <= e; i++)
if(i != && (d != || i != ))
ans += dfs(pos - ,i,i == e && on);
if(!on) dp[pos][d] = ans;
return ans;
}
int cal(int a)
{
int tot = ;
while(a){
bit[++tot] = a%;
a /= ;
}
return dfs(tot,);
}
int main()
{
memset(dp,-,sizeof(dp));
int n,m;
while(scanf("%d%d",&n,&m) == && n + m){
//cout<<cal(m)<<" "<<cal(n - 1)<<" ";
printf("%d\n",cal(m) - cal(n - ));
}
}

数位dp入门 hdu2089 不要62的更多相关文章

  1. 【数位dp】hdu2089 不要62

    http://www.cnblogs.com/xiaohongmao/p/3473599.html #include<cstdio> using namespace std; int n, ...

  2. HDU 2089 不要62【数位DP入门题】

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  3. xbz分组题B 吉利数字 数位dp入门

    B吉利数字时限:1s [题目描述]算卦大湿biboyouyun最近得出一个神奇的结论,如果一个数字,它的各个数位相加能够被10整除,则称它为吉利数.现在叫你计算某个区间内有多少个吉利数字. [输入]第 ...

  4. hdu3555 Bomb 数位DP入门

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555 简单的数位DP入门题目 思路和hdu2089基本一样 直接贴代码了,代码里有详细的注释 代码: ...

  5. 数位DP入门题——[hdu2089]不要62

    数位DP是我的噩梦. 现在初三了,却没AC过数位DP的题目. 感觉数位DP都是毒瘤-- 题目 hdu不用登录也可以进去,所以就不把题目copy到这里来了. 题目大意 求区间[n,m][n,m][n,m ...

  6. HDU 2089 不要62(数位dp入门)

    题意:统计区间 [a,b] 中不含 4 和 62 的数字有多少个. 题解:这是数位DP的入门题了,首先要理解数DP的原理,DP[i][j]:代表第i位的第j值,举个栗子:如4715   数位数是从右向 ...

  7. HDU 2089 - 不要62 - [数位DP][入门题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 Time Limit: 1000/1000 MS (Java/Others) Memory Li ...

  8. HDU-2089不要62-暴力或数位DP入门

    不要62 题意:给定区间,求在这个区间中有多少个数字,不包含4且不包含62: 这道题作为数位DP的入门题: 暴力也是可以过 #include<cstdio> #include <io ...

  9. Hdu 2089 不要62 (数位dp入门题目)

    题目链接: Hdu 2089 不要62 题目描述: 给一个区间 [L, R] ,问区间内不含有4和62的数字有多少个? 解题思路: 以前也做过这个题目,但是空间复杂度是n.如果数据范围太大就GG了.今 ...

随机推荐

  1. 我的Android开发相关文章

    Pro Android学习笔记: Pro Android学习笔记(一零七):2D动画(2):layout渐变动画 2014.7.25 Pro Android学习笔记(一零六):2D动画(1):fram ...

  2. Nginx代码调试——gdb工具

    参考网上的资料,写了一个configprint模块,其功能为打印输出location配置内容,并计数访问次数. 代码链接如下:https://github.com/PaulWeiHan/nginx_m ...

  3. [转]BeagleBone Black USB一线通(2)

    接上篇  BeagleBone Black USB 一线通(1) 三.网络与ssh终端 通过串口终端我们可以看到启动的过程,也能做一些交互操作,比如我们看到了网络接口的状况.其中的usb0已经在随板的 ...

  4. KafkaSpout 浅析

    最近在使用storm做一个实时计算的项目,Spout需要从 KAFKA 集群中读取数据,为了提高开发效率,直接使用了Storm提供的KAFKA插件.今天抽空看了一下KafkaSpout的源码,记录下心 ...

  5. 彻底理解android中的内部存储与外部存储

    我们先来考虑这样一个问题: 打开手机设置,选择应用管理,选择任意一个App,然后你会看到两个按钮,一个是清除缓存,另一个是清除数据,那么当我们点击清除缓存的时候清除的是哪里的数据?当我们点击清除数据的 ...

  6. redhat 6.4 双网卡绑定

    linux系统配置 1.redhat 6.4 双网卡绑定 1)#ethtool eth* //在服务器网口接网线至笔记本,确定各网口的配置文件: 2)切换目录 #cd /etc/sysconfig/n ...

  7. Java并发——同步容器与并发容器

    同步容器类 早期版本的JDK提供的同步容器类为Vector和Hashtable,JDK1.2 提供了Collections.synchronizedXxx等工程方法,将普通的容器继续包装.对每个共有方 ...

  8. hibernate篇章一

    我只想说一句话FUCK! 昨晚查了一晚上资料. 今早细致勃勃的准备搭建环境,早上到现在失败!失败!失败!蛋疼 有兴趣的可以试试.我暂时搁置,去做分页了 有兴趣需要相关资料的可以查阅我的微博java66 ...

  9. Win7上安装oracle中可能遇到的错误

    安装oracle,总是出现一个警告两个错误错误,其描述是:OUI-18001:不支持操作系统’Windows Vista版本6.1’,找了好久,终于找到原因,因为oracle不支持Win7操作系统. ...

  10. iOS开发——常用字符串string相关方法和处理

    (持续更新中……) 1,四舍五入 2,剔除字符 3,拼接字符 4,字符个数和长度 5,字符串的比较 6,字符串的范围 7,字符串转Number类型