数位动态规划 
    数位动态规划是求解一个大区间[L, R]中间满足条件Q的所有数字的个数(或者和,或其他)的一种方法。它通过分析每一位上的数字,一般用 dp[len][digit][...] 来表示状态“len位长的数字,最高位数字为digit所具有的xx特性”,利用记忆化搜索保存中间结果,从而加快求解速度。 
    通过求 f(n) 从0到n中满足条件Q的数字的个数,则所求的结果为 f(R) - f(L-1). 
    大多数数位dp都可以用一个DFS函数来进行记忆化搜索:

//len数字的位数,digit最高位的值,end_flag 表示digit是否是第len位(从低位向高位数,个位为第1位) 的范围边界
int Dfs(int len, int digit, bool end_flag){//超出边界if (len <= 0 || digit > 9 || digit < 0)return 0;//记忆化搜索,如果之前已经求出来了,则返回。注意这里要求 end_flag为falseif (!end_flag && dp[len][digit] != -1)return dp[len][digit];// 最简单情况看数字是否满足要求if (len == 1)return dp[len][digit] = xxx;//如果当前位是边界数字N对应位的最大值,则下一位的范围只能从0到边界数字N的下一位的最大值。否则为0 到 9int end = end_flag ? bits[len - 2] : 9; int ans = 0;for (int i = 0; i <= end; i++){ans += Dfs(len - 1, i, end_flag && (i==end));}if (!end_flag) //digit不是第len位的最高范围,则可以将结果缓存dp[len][digit] = ans;return ans;
}

题目大意 
    给定一个区间[L, R],求区间内满足条件“数位上不含有4,且不含有62(62必须连续)”的数字的个数。

分析 
    直接套用模板

实现

#include<iostream>
#include<stdio.h>
using namespace std;
int dp[9][10];
int bits[8];//用dfs进行记忆化搜索, dp[len][digit] 表示 len位数字,最高位为digit满足条件的个数. 这里对数字范围没有限制!
//搜索的时候,若要进行记忆化,需要 dp[len][digit]的结果对数字范围没有限制,因此需要判断 end_flag来决定是否进行记忆。//len数字的位数,digit最高位的值,end_flag 表示digit是否是第len位(从低位向高位数,个位为第1位) 的范围边界
int Dfs(int len, int digit, bool end_flag){//超出边界if (len <= 0 || digit > 9 || digit < 0)return 0;//记忆化搜索,如果之前已经求出来了,则返回。注意这里要求 end_flag为falseif (!end_flag && dp[len][digit] != -1)return dp[len][digit];// 最简单情况看数字是否满足要求if (len == 1)return dp[len][digit] = (digit != 4);if (digit == 4)return dp[len][digit] = 0;//如果当前位是边界数字N对应位的最大值,则下一位的范围只能从0到边界数字N的下一位的最大值。否则为0 到 9int end = end_flag ? bits[len - 2] : 9; int ans = 0;for (int i = 0; i <= end; i++){if (!(digit == 6 && i == 2)) //除去 62连续的情况ans += Dfs(len - 1, i, end_flag && (i==end));}if (!end_flag) //digit不是第len位的最高范围,则可以将结果缓存dp[len][digit] = ans;return ans;
}//将数字n的各个位上的范围求出来,保存到bits数组中,返回数字n的长度
int Init(int n){    memset(bits, 0, sizeof(bits));int k = 0;while (n){bits[k++] = n % 10;n /= 10;}return k;
}int Solve(int n){  int len = Init(n); //数字长度为len,则为了避免首位遍历从0到bits[len-1],给数字增加一个前导0。//len + 1位,首位为0,且0是最高位的边界int ans = Dfs(len + 1, 0, true);return ans;
}
int main(){int m, n;memset(dp, -1, sizeof(dp));while (scanf("%d %d", &m, &n)){if (m == 0 && n == 0)break;             int ret1 = Solve(m-1);int ret2 = Solve(n);int ret = ret2 - ret1;printf("%d\n", ret);}return 0;
}

转载于:https://www.cnblogs.com/gtarcoder/p/5463451.html

hdu_2089 不要62相关推荐

  1. python测试脚本 进制转换_使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)...

    不过,status中包含了一个mid字段,通过mid,我们实际上是可以通过计算得到url的. 在开始计算之前有必要说明一下,什么是base62编码.它实际上就是十进制和62位进制的互换.对于62进制, ...

  2. 不要62 ---数位DP

    题意:求m到n中不含62和4的数的个数. 题目链接 思路:数位dp模板求满足的数字或不满足的数字,刚学,就求不满足的数. #include<stdio.h> #include<str ...

  3. 2月国内搜索市场:360继续上升 百度下降0.62%

    IDC评述网(idcps.com)03月06日报道:根据CNZZ数据显示,在国内搜索引擎市场中,百度在2014年2月份所占的份额继续被蚕食,环比1月份,下降了0.62%,为60.50%.与此相反,36 ...

  4. 商汤62篇论文入选CVPR 2019,一览五大方向最新研究进展

    (图源自视觉中国) 作为与ICCV.ECCV并称为计算机视觉领域三大国际会议之一,本届CVPR大会共收到5265篇有效投稿,接收论文1300篇,接收率为25.2%. 商汤科技CVPR 2019录取论文 ...

  5. Kaggle发布数据科学最新报告!82%男性, 62%硕博,薪酬6位数居多

    Kaggle开发者年度报告,机器之心编辑 Kaggle 正式发布了 2021 年度报告,超过 2.5 万名开发者参与调查,但来自中国的 Kaggle 数据科学家应该并不多.这是 Kaggle 进行用户 ...

  6. CVPR 2020录用率十年最低,商汤官宣62篇入选

    允中 发自 凹非寺  量子位 报道 | 公众号 QbitAI 又到一年一度秀视觉实力时. AI独角兽商汤,今日官宣CVPR 2020成绩单. 作为AI视觉领域最重要的顶会,商汤一向成绩不俗--今年商汤 ...

  7. cad画流程图的插件_CAD制图太慢?62款辅助插件汇总,款款精品,效率提升80%

    CAD制图太慢?62款辅助插件汇总,款款精品,效率提升80%! 前段时间单位来了个新同事,年纪轻轻的,CAD玩得却特别溜,别人两小时画出来的图,他半小时就能搞定,太厉害了! 我们虽然不服气,但确实也挺 ...

  8. 例题6-2 铁轨(Rails, ACM/ICPC CERC 1997, UVa 514)

    栈应用 例题6-2 铁轨(Rails, ACM/ICPC CERC 1997, UVa 514) 错解 1.每次要把栈清空 2.不能用空的栈(栈顶)去比较 #include<iostream&g ...

  9. python中mid_使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)...

    不过,status中包含了一个mid字段,通过mid,我们实际上是可以通过计算得到url的. 在开始计算之前有必要说明一下,什么是base62编码.它实际上就是十进制和62位进制的互换.对于62进制, ...

最新文章

  1. 容量是GPT-2的1.7倍!谷歌打造神经对话模型Meena
  2. Java CopyOnWriteArrayList
  3. linux没有交换分区会怎样,linux – 服务器拒绝使用交换分区
  4. linux发送http请求xml报文,使用curl命令行发送/发布xml文件
  5. 团队作业8——测试与发布(Beta阶段)
  6. 【NLP预训练】复旦邱锡鹏超全NLP预训练模型综述论文:两张图带你梳理完整脉络...
  7. Android 应用程序之间数据共享—ContentProvider
  8. Day_05初始化GDT和IDT
  9. DFMZ-开发过程中遇到的错误-01
  10. 奥迪A8的L3级自动驾驶方案---奥迪A8的zFAS
  11. 艾宾浩斯遗忘曲线.pdf百日计划表.pdf考研时间计划表.pdf每日打卡.pdf每日复习计划表.pdf详细日计划.pdf月计划表.pdf周计划.pdf
  12. java17长期支持版本_Java 8后的首个长期支持版本Java 11
  13. ABAP OLE下载到EXCEL
  14. 业务部门战略规划与支撑部门战略规划
  15. 海外社交媒体最佳图片尺寸
  16. 微信分享到朋友圈的链接,内容打开正常,但在微信中分享时封面缩略图图像和标题显示不出来?
  17. Hexo-yilia主题个性化美化及功能添加
  18. 全面解析ThreadLocal
  19. 看完《爱情公寓5》结局后的这几天
  20. 大豆凝集素(SBA)

热门文章

  1. 优地机器人厂家_2019中国人工智能机器人企业TOP30榜单发布 优地科技跻身前十...
  2. win10电脑插耳机没声音_电脑没有声音是什么原因 教您电脑突然没声音怎么解决...
  3. 16进制 转为图片 php_Python 十六进制hex-bytes-str之间的转换和Bcc码的生成
  4. Angular路由——子路由
  5. 第0周作业2:博客阅读和思考
  6. [Tomcat报错]SEVERE: Error listenerStart
  7. 生成n对括号的合法全排列
  8. 第二阶段冲刺站立会议09
  9. Spring4.0学习笔记(3) —— Spring_Bean之间的关系
  10. C# MVC的博客开发(三)注册