数位dp解决的问题是指求在一段数的区间里面 满足条件的数的个数

核心为两点

http://wenku.baidu.com/link?url=tpfIYzhx_MzevpIM58UZ66pr-87MCFPKTMKFdGDi5jUqyO9ckti0mY6diSz2PZEL_ZBhd2zIbhus1mnzDiAO1B5K2Vu38YDsqjmOvYKFT6q

我自己总结下吧

第一 是dp的状态转移方程

dp[i][j] 表示的是以j开头的i位数 满足条件的个数为多少

既然是要记录满足条件的个 那么 dp[i][j]=sum(dp[i-1][0~9]) 这个不难理解

for(int i=1;i<=7;i++)
{

for
(int j=0;j<=9;j++)
{

for
(int k=0;k<=9;k++)
{

if
(j!=4&&!(j==6&&k==2)) dp[i][j]+=dp[i-1][k];
}
}
}

然后就是solve函数问题 solve(i)这个函数的作用是求出【0,i)区间满足条件的数的个数

大致的思想 是从高位开始 逐一枚举比该为数小的数 在满足的条件的情况下 统计和 每次枚举完

举完一位以后 由于是列举比n小的数 所以 每一位枚举结束后 就需要将这个位定下来 

花了不少时间入门。。继续干!

#include<cstdio>
#include<iostream>
#include<string.h>
using namespace std;
int
dp[][];
int
solve(int n)
{

int
dig[],len=;
memset(dig,,sizeof(dig));
while
(n>)
{

dig[++len]=n%;
n=n/;
}

dig[len+]=;
int
ans=;
for
(int i=len;i;i--)//这里的思想 从最高位开始枚举 枚举完一位以后 由于是列举比n小的数 所以 每一位枚举结束后 就需要将这个位定下来
{
for
(int j=;j<dig[i];j++)
{

if
(j!=&&!(dig[i+]==&&j==))//判断此时的枚举是否合法
ans+=dp[i][j];
}

if
(dig[i]==||(dig[i+]==&&dig[i]==)) break;//之前位置定好了 如果出现了不满足条件的情况 后面继续下去就没有什么意思了
}
return
ans;
}

int
main()
{

int
n,m;
while
(cin>>n>>m)
{

if
(m+n==) break;
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];
}
}
}

cout<<solve(m+)-solve(n)<<endl;// 这里要不要加1是要考虑区间的开闭情况
}
return
;
}

最新文章

  1. Multiple dex files define Lcom/google/zxing/BarcodeFormat
  2. Tomcat双向Https验证搭建,亲自实现与主流浏览器、Android/iOS移动客户端超安全通信
  3. CentOS 6.5 下安装 Kibana5
  4. [LeetCode]题解(python):055-Jump Game
  5. POJ 2080
  6. 笨笨-歌词伴侣V1.2(酷狗KRC转LRC,LRC歌词批量下载)
  7. iOS 视频开发-AVPlayer
  8. CentOS 6.6 yum源完全配置
  9. poj2431 Expedition
  10. C#编译器和CLI的安装
  11. 有史以来功能最全,使用最简单的excel导入/导出工具
  12. Python中使用hashlib进行加密的简单使用
  13. Vim手册
  14. 将字符串XX,SS以“,”符号进行区分并分别存储在数组中
  15. SQL Update
  16. 2D 加速图形界面开发源代码亲写 想买来学习得加qq 313244484 20万当前代码,完整400万包写完
  17. django学习第一天
  18. python之路---04 列表 元组
  19. Lua 中与字符串有关的函数学习
  20. More Effective C++ 35个改善方法

热门文章

  1. openstack 基镜像展开过程
  2. http digest鉴权
  3. SQL优化 | Oracle 绑定变量
  4. markdown中如何设置字体为红色?
  5. LC 989. Add to Array-Form of Integer
  6. android APP国际化一键切换实现
  7. ISO/IEC 9899:2011 条款6.4.6——标点符号
  8. Qt编写自定义控件59-直方动态图
  9. shell脚本安装python、pip--交互式的
  10. C#登录SSH执行命令,下载文件