其实是做topcoder的时候碰到不会的题,看人家说要用数位dp,所以拿http://acm.hdu.edu.cn/showproblem.php?pid=2089来学习了一下

数位dp适合在一段数的区间内找出满足某些条件的数的个数,这个时候往往不能之间遍历,肯定会超时,则一般使用数位dp来解决

数位dp的常见形式是dp[i][j],表示开头是j的i位数满足条件的有多少个,当然也有其他dp[i][j][k]等等,但i,j,k都很小,不会像直接遍历那么耗时

像这道题的话,知道了dp[i][j]表示的是啥,就能列出状态转移方程(稍微认真看就能理解的):

for(int i=1;i<=7;i++){for(int j=0;j<10;j++)//枚举第i位可能出现的数{for(int k=0;k<10;k++)//枚举第i-1位可能出现的数{if(j!=4&&!(j==6&&k==2))dp[i][j]  += dp[i-1][k];}}}

更加具体的介绍可以参考:http://wenku.baidu.com/link?url=o3ER_gVCyB0qcKthM-Y8vPtAGZ_u5bzOu_gUCUhPcXC6YfaSDgtBSXNEEvvGvSzyuDE9TULcPNsDrRd9IUtQVHeKUVrnPUjyfWjCly_J7Xq

以下附上ac这题的代码:

#include <iostream>
#include <string>
#include <string.h>
#include <algorithm>
using namespace std;
int dp[10][10];
void init()
{memset(dp,0,sizeof(dp));dp[0][0] = 1;for(int i=1;i<=7;i++){for(int j=0;j<10;j++)//枚举第i位可能出现的数{for(int k=0;k<10;k++)//枚举第i-1位可能出现的数{if(j!=4&&!(j==6&&k==2))dp[i][j]  += dp[i-1][k];}}}
}
int solve(int n)
{init();int digit[10];int len = 0;while(n>0){digit[++len] = n%10;n/=10;}digit[len+1]=0;int ans = 0;for(int i=len;i;i--){for(int j=0;j<digit[i];j++){if(j!=4&&!(digit[i+1]==6&&j==2))ans+=dp[i][j];}if(digit[i]==4||(digit[i]==2&&digit[i+1]==6))break;}return  ans;
}
int main()
{int l,r;while(cin>>l>>r){if(l+r==0)break;elsecout<<solve(r+1)-solve(l)<<endl;}return 0;}

转载于:https://www.cnblogs.com/pangblog/p/3400169.html

初学数位DP--hdu 2089相关推荐

  1. HDU - 2089 不要62 【暴力打表】【数位DP】

    不要62 HDU - 2089 题意 求区间[n,m]之间有多少个数字不含4或者连续的62 解法1 由于数据范围是0~1e6,所以直接暴力判断每一位数字是否含有4或者62,然后求前缀和即可 #incl ...

  2. HDU 2089 不要62 数位DP

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2089 题目描述: 给定一个区间, 让你求这个区间中所有不带62 或 4 的数的个数 解题思路: 很明 ...

  3. hdu 2089 不要62【数位dp】

    HDU 2089 求给定区间内不含62和4的数的个数. 数位dp入门.从这里我清楚了一些数位dp的用法.比如limit是判断是否达到上界,而且需要判断(!limit)..比如若题目要求不含11的个数, ...

  4. HDU 2089 不要62(数位DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意 求一个区间内,不出现4和连续的62的数的个数. 分析 可以暴力打表.也可以数位DP. 设: ...

  5. hdu 2089 数位dp入门

    HDU 2089 题意:中文题 思路:数位dp入门题 AC代码: #include "iostream" #include "string.h" #includ ...

  6. 不要62 HDU - 2089【数位dp】

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

  7. Hdu 2089-不要62 数位dp

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=2089 不要62 Time Limit: 1000/1000 MS (Java/Others)    Me ...

  8. HDU 6156 Palindrome Function 数位DP

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6156 题目描述: 求L~R所有的数的l~r进制的f(x), f(x) = 当前进制 如果回文串, f ...

  9. 【数位DP】B-number(HDU 3652)

    B-number HDU 3652 题目大意: 有一个数n,求出1~n中含'13'且能被13整除的数有多少个 输入样例 13 100 200 1000 输出样例 1 1 2 2 解题思路: 用数位DP ...

最新文章

  1. linux 交叉编译 openssl
  2. python在匿名函数作和_跟光磊学Python开发-匿名函数函数和高阶函数
  3. css中position初解
  4. pandas计算移动平均值
  5. cocos2d之z轴位置示例
  6. 前端处理方式:特殊格式时间转换(2020-11-27T02:58:41.000000Z)
  7. PCB CS架构(工程系统)实现单点登入方法
  8. 关于JavaScript实现图片预加载的改进
  9. GTASA圣安地列斯 DirectX 2.0 ENB 下窗口化运行的解决办法
  10. 作为前端程序员:你必须知道的常用英语词汇!!全是干货!!!
  11. 美国纽约大学超级计算机中心,美国纽约最好的八所大学介绍
  12. 为什么说90%以上的创业者都在亏钱?
  13. 数据结构——2-3树
  14. GIS地图基础知识--入门教程
  15. 面具root后如何解决SafetyNet不通过-SafetyNet API错误解决办法
  16. android 新闻功能列表,news: 用Android基本技术实现的新闻App
  17. Python字符串算法
  18. 【融职教育】Web全栈工程师课程安排
  19. 安装Anaconda遇到问题--NSIS Error
  20. 活体检测——专利调研

热门文章

  1. 网络推广关键词布局仍需网络推广专员时刻“运筹帷幄”
  2. 浅析网站seo诊断都包括哪些内容?
  3. 软件验收标准和验收方法_自动门的验收标准
  4. android okhttp 多线程,android – Okhttp Authenticator多线程
  5. h3c wa4320配置上网_企业路由不为人知的功能:自动吸粉、上网监控、多宽带合并...
  6. 理解TCP序列号(Sequence Number)和确认号(Acknowledgment Number)
  7. 详解Google第二代TPU 既能推理又能训练 性能霸道
  8. LSM树——放弃读能力换取写能力,将多次修改放在内存中形成有序树再统一写入磁盘,查找复杂度O(k*log(n)),结合bloom filter提高查找性能...
  9. angular1x初始与架构演进(一)
  10. HSmartWindowControl 之 摄像头实时显示( 使用 WPF )