题意:

  只要含连续的62,或者含4的车牌号码都是不吉利的,其他都是吉利的组合。问区间[L,R]中有多少个数是吉利的?

思路:

  依然是利用树(10进制是十叉树)的思想,统计左边所有子树有多少个数是吉利的。这道题得先打表,就是暴力打表都不会超时,否则可能超时了。暴力打表可以直接将0~106扫一遍直接找到[0->R]中吉利的有几个,利用前缀和就行了。

  太暴力就没意思了。先用DP处理出吉利的数量以及最高位以2开头的吉利数量,用dp[i][1]表示i位数的吉利数量,dp[i][2]表示i位数且最高位为2的吉利数量。接下来对每个询问的L和R进行统计,差作为答案。看代码就行了,主要是需要考虑得全面一些,明确这一步统计的到底是表示什么。

 //#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
#include <algorithm>
#include <vector>
#include <iostream>
#define pii pair<int,int>
#define INF 0x7f3f3f3f
#define LL long long
using namespace std;
const double PI = acos(-1.0);
const int N=; int dp[N][N], bit[N], s, t;
void pre_cal()
{
dp[][]=;
for(int i=; i<=; i++ )
{
dp[i][]=*dp[i-][]-dp[i-][]; //吉利(包括0开头)
dp[i][]=dp[i-][]; //最高位含2:已经扣除不吉利的了
}
} int cal(int n) //计算区间[0~n]吉利的数量
{
memset(bit,,sizeof(bit));
int len=;
while(n)
{
bit[++len]=n%;
n/=;
}
int ans=, i;
for(i=len ;i>; i--)
{
ans+=dp[i-][]*bit[i];
if(bit[i]>) ans-=dp[i-][];
if(bit[i+]==&&bit[i]>) ans-=dp[i-][];
if(bit[i]>) ans-=dp[i-][]; //注意点!
if(bit[i+]==&&bit[i]==||bit[i]==) break;
}
if(i==) ans++; //n本身是否吉利?
return ans;
} int main()
{
//freopen("input.txt","r",stdin);
pre_cal();
while(scanf("%d%d",&s,&t), s+t)
printf("%d\n",cal(t)-cal(s-));
return ;
}

AC代码

HDU 2089 不要62 (数位DP,入门)的更多相关文章

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

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

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

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

  3. [hdu 2089] 不要62 数位dp|dfs 入门

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意:求[n, m]区间内不含4和62的数字个数. 这题有两种思路,直接数位dp和dfs 数位d ...

  4. HDU 2089 不要62 数位DP模板题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 参考博客:https://www.cnblogs.com/HDUjackyan/p/914215 ...

  5. HDU 2089 不要62(数位DP&#183;记忆化搜索)

    题意  中文 最基础的数位DP  这题好像也能够直接暴力来做   令dp[i][j]表示以 j 开头的 i 位数有多少个满足条件 那么非常easy有状态转移方程 dp[i][j] = sum{ dp[ ...

  6. hdu 2089 不要62 数位dp

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

  7. hdu 2089 不要62 (数位dp基础题)

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

  8. hdu 2089不要62 (数位dp)

    Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来 ...

  9. hdu 2089 不要62--数位dp入门

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

  10. hdu 4722 Good Numbers( 数位dp入门)

    Good Numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

随机推荐

  1. HDU - 6344 2018百度之星资格赛 1001调查问卷(状压dp)

    调查问卷  Accepts: 1289  Submissions: 5642  Time Limit: 6500/6000 MS (Java/Others)  Memory Limit: 262144 ...

  2. iOS证书和描述文件的配置

    1.登录Apple开发者账号,进入Apple Developer主页,点击Account 2.点击Certificates,ID&Profiles 3.生成CRS文件 1.打开mac上的钥匙串 ...

  3. CentOS软件包管理

    rpm安装包管理 指令 说明 rpm -i XX.rpm 安装XX.rpm软件包 rpm -qa XX 查看XX软件包安装的所有文件 rpm -e XX 卸载XX软件包 yum管理软件 指令 说明 y ...

  4. ue4 改c++类名

    http://blog.csdn.net/chinahaerbin/article/details/50855135

  5. Unity 5着色器系统代码介绍(下)

    http://forum.china.unity3d.com/thread-25738-1-10.html 上一篇对着色器系统的工作原理做了介绍,现在我们将继续深入,将目光聚焦在标准着色器的光照函数. ...

  6. Python-8-print和import进阶

    1.打印多个参数 用逗号隔开: >>> print('Age:', 42) Age: 42 参数之间自动插入了一个空格字符 >>> name = 'Gumby' & ...

  7. easyui的datagrid用js插入数据等编辑功能的实现

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. luogu P2709 小B的询问 最简单的莫队

    块内按右端点sort,块外按左端点sort 话说我刚开始这么修改... inline )*(c[a[i]]-),--c[a[i]];} inline )*(c[a[i]]+),++c[a[i]];} ...

  9. String 中配置文件详解

    <context:component-scan>使用说明 http://blog.csdn.net/chunqiuwei/article/details/16115135

  10. .Net Core 做请求监控NLog

    使用 NLog 给 Asp.Net Core 做请求监控 https://www.cnblogs.com/cheesebar/p/9078207.html 为了减少由于单个请求挂掉而拖垮整站的情况发生 ...