题目链接: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;
}
}

最新文章

  1. SQL Server-数据类型(七)
  2. 关于目录路径path
  3. Spring配置
  4. QT QT练习一
  5. laravel打印sql语句
  6. ACM/ICPC 之 树形DP(POJ1192)
  7. 【小白入门向】tarjan算法+codevs1332上白泽慧音 题解报告
  8. 4G时代的抢钱之道
  9. SQL2005以上行变行简单实现
  10. eclipse 启动 出现Failed to create the Java Virtual Machine&quot; 解决方案
  11. jQuery Mobile (中)
  12. Swift -&gt; RunTime(动态性) 问题 浅析
  13. hibernate--多对一单向关联 (重点!!!)
  14. apicloud下拉刷新
  15. Linux系统LVM基本使用
  16. 【翻译】Ext JS 4——Ajax和Rest代理处理服务器端一场和消息的方法
  17. python基础之作业2----购物车小练习
  18. Tomcat报错: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/myApp]]
  19. elast alert
  20. Linux vim命令详解

热门文章

  1. MySQL中in(常量列表)的执行计划
  2. IIS中使用ASP.NET MVC的经验总结
  3. Rserve方式连接别的服务器
  4. vmware workstation(mac版)查看vmnet8的网关地址
  5. java中什么是bridge method(桥接方法)
  6. Nginx+tomcat集群中,session的共享
  7. flex hack 记录
  8. python write file
  9. 如何正确对tomcat host进行配置
  10. 九度OJ 1260:珍珠项链 (字符串处理、DP)