题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089

题意:

  问你在区间[n,m]中,有多少个数字不含"4"且不含"62"。

题解:

  表示状态:

    dp[i][j] = numbers

    数字有i位,开头为数字j,合法的数字个数。

  如何转移:

    dp[i][j] = ∑ dp[i-1][k]  (j!=4,6 && k!=4)

    dp[i][6] = ∑ dp[i-1][k]  (k!=2,4)

    dp[i][4] = 0

  边界条件:

    dp[0][0] = 1

  找出答案:

    题目中询问的是区间,所以答案可以用差分形式表示:

      ans = cal_ans(m+1) - cal_ans(n)

      cal_ans(i)表示小于i的合法数字个数。

    比如我要求小于32768的合法数字个数:

      ans += 0xxxx, 1xxxx, 2xxxx的个数

      ans += 30xxx, 31xxx的个数

      ans += 320xx, 321xx, 322xx, 323xx, 324xx, 325xx, 326xx的个数

      ans += 3270x, 3271x, 3272x, 3273x, 3274x, 3275x的个数

      ans += 32760, 32761, 32762, 32763, 32764, 32765, 32766, 32767的个数(均为1)

    所以依次枚举i(从len到1),意思是i+1位之前的数字都已确定,该枚举第i位了。

    枚举第i位的数字为j。ans+=dp[i][j]的条件是前一位和当前位不能构成"62",即:d[i+1]!=6 || j!=2

    并且,一旦(d[i]==4 || (d[i+1]==6 && d[i]==2)),就应退出循环,因为之后枚举的数字一定都是不合法的。

AC Code:

 #include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_L 10
#define MAX_D 15 using namespace std; int n,m;
int d[MAX_L];
int dp[MAX_L][MAX_D]; void cal_dp()
{
memset(dp,,sizeof(dp));
dp[][]=;
for(int i=;i<=;i++)
{
for(int j=;j<=;j++)
{
for(int k=;k<=;k++)
{
if(j!= && (j!= || k!=))
{
dp[i][j]+=dp[i-][k];
}
}
}
}
} int cal_ans(int x)
{
int len=;
int ans=;
while(x)
{
d[++len]=x%;
x/=;
}
d[len+]=;
for(int i=len;i>;i--)
{
for(int j=;j<d[i];j++)
{
if(d[i+]!= || j!=) ans+=dp[i][j];
}
if(d[i]== || (d[i+]== && d[i]==)) break;
}
return ans;
} int main()
{
cal_dp();
while(cin>>n>>m)
{
if(n== && m==) break;
cout<<cal_ans(m+)-cal_ans(n)<<endl;
}
}

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. hud 2089 不要62 (数位dp)

    #include<stdio.h> #include<string.h> #include<math.h> #define max 10 ]; int number ...

  10. HDOJ题目2089 不要62(数位DP)

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

随机推荐

  1. IIS8应用池重启脚本

    重启 IIS8 应用程序池的批处理 批处理很简单:c:\windows\system32\inetsrv\AppCmd.exe stop apppool /apppool.name:"ASP ...

  2. linux下常用网页查看下载工具--wget

    http://www.linuxidc.com/Linux/2015-06/118256.htm 5 个基于Linux命令行的文件下载和网站浏览工具 rTorrent.wget.cURL.w3m.El ...

  3. UVA 10209

    10209 - Is This Integration ? #include <stdio.h> #include <math.h> /* */ //多次错误都是因为我将PI定 ...

  4. 【ubantu】Ubuntu的一些常用快捷键

    Ubuntu操作基本快捷键* 打开主菜单 = Alt + F1* 运行 = Alt + F2* 显示桌面 = Ctrl + Alt + d* 最小化当前窗口 = Alt + F9* 最大化当前窗口 = ...

  5. [原]Nginx+Lua服务端合并静态文件

    http://homeway.me 0x01.About 源代码已经上传到github:https://github.com/grasses/nginx-lua-static-merger nginx ...

  6. Google Gson实现JSON字符串和对象之间相互转换

    User实体类 package com.test.json; /** * User 实体类 */ public class User { private String name; private St ...

  7. html5-补充知识

    原理 html5+开发app的原理大概是这样: html页面负责内容: ui负责页面样式: js负责调用原生app方法. html5 html5这部分负责页面,也就是app中你看到的东西,大概的架构和 ...

  8. python基础-------python2.7教程学习【廖雪峰版】(二)

    2017年6月7日14:59:27任务:    看完python基础1.计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文 ...

  9. config相关操作(转)

    转自:http://www.cnblogs.com/kissdodog/archive/2013/04/16/3025315.html,这是一个专题,感觉比较好,有空可以看与一下 System.Con ...

  10. shell脚本调试运行

    1.在命令行提供参数:$sh -x script.sh   但是有的shell脚本只能用 ./xxx.sh的方式运行,不能用sh命令解析执行.则此方法会报错.2.脚本开头提供参数:#!/bin/sh ...