开学之后完全没时间写博客....

HDU 2089 不要62(vjudge) 数位DP

思路:

题目给出区间[n,m] ,找出不含4或62的数的个数

用一个简单的差分:先求0~m+1的个数,再减去0~n的个数.

但问题依旧不简单,再次简化为求0~i位数中不含4或62的数的个数.

  1. i= //0~9中
  2. i= //0~99中
  3. i= //0~999中
  4. ......
  1. dp[i][] //0~i位数中的吉利数
  2. dp[i][] //0~i位数中以2打头的吉利数
  3. dp[i][] //0~i位数中的非吉利数(含4或62)

所以第i位数中的吉利数个数为:

  1. dp[i][]=dp[i-1][]*-dp[i-][i]

第i位数中以2打头的幸运数个数为:

  1. dp[i][]=dp[i-][]

第i位数中的非吉利数个数为:

  1. dp[i][]=dp[i-][]*+dp[i-][]+dp[i-][]

同时初始值为:

  1. dp[][]=;
  2. dp[][]=;
  3. dp[][]=;

AC码:

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. using namespace std;
  5.  
  6. int dp[][];
  7.  
  8. void INIT()
  9. {
  10. memset(dp,,sizeof(dp));
  11. dp[][]=;
  12. for(int i=;i<=;i++)
  13. {
  14. dp[i][]=dp[i-][]*-dp[i-][];//在吉利数首位补除了4的9个数,减去在2前补6的个数
  15. dp[i][]=dp[i-][];//吉利数在首位补2
  16. dp[i][]=dp[i-][]*+dp[i-][]+dp[i-][];//不吉利的情况
  17. }
  18. }
  19.  
  20. int work(int x)
  21. {
  22. int d[],cnt=,temp=x;
  23. while(temp)
  24. {
  25. d[++cnt]=temp%;
  26. temp/=;
  27. }
  28. d[cnt+]=;
  29. int flag=,ans=;
  30. for(int i=cnt;i>;i--)
  31. {
  32. ans+=d[i]*dp[i-][];//用前一位所以不吉利数推出
  33. if(flag) ans+=d[i]*dp[i-][];// 之前有不吉利数
  34. else
  35. {
  36. if(d[i]>) ans+=dp[i-][];//4
  37. if(d[i]>) ans+=dp[i-][];//6
  38. if(d[i+]==&&d[i]>) ans+=dp[i][];//62
  39. }
  40. if(d[i]==||(d[i+]==&&d[i]==)) flag=;
  41. }
  42. return x-ans;//减去不吉利数的个数
  43. }
  44.  
  45. int main()
  46. {
  47. int m,n;
  48. INIT();
  49. while(~scanf("%d%d",&n,&m))
  50. {
  51. if(n==&&m==) break;
  52. printf("%d\n",work(m+)-work(n));
  53. }
  54. return ;
  55. }

2019-09-16 18:50:26

2019年9月训练(壹)数位DP (HDU 2089)的更多相关文章

  1. 2019年9月训练(贰)区间DP (luogu 4290)

    区间DP luogu 4290 明显的区间DP. 定义 dp[l][r][k]/*表示区间[l,r]能否凑成k(W,I,N,G)字符*/mp['W']=1;mp['I']=2;mp['N']=3;mp ...

  2. 数位DP HDU - 2089 不要62

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

  3. 专题训练之数位DP

    推荐以下一篇博客:https://blog.csdn.net/wust_zzwh/article/details/52100392 1.(HDOJ2089)http://acm.hdu.edu.cn/ ...

  4. 2019年5月训练记录(更新ing)

    前言 \(ZJOI\)正式结束了. 但期中考试只考了年级\(216\),退役既视感... 于是就被抓回去补文化课了. 下半个学期可能要以文化课为主了吧! 但周三.周日应该还是会正常参加训练的,但其他时 ...

  5. [UOJ 275/BZOJ4737] 【清华集训2016】组合数问题 (LUCAS定理的运用+数位DP)

    题面 传送门:UOJ Solution 这题的数位DP好蛋疼啊qwq 好吧,我们说回正题. 首先,我们先回忆一下LUCAS定理: \(C_n^m \equiv C_{n/p}^{m/p} \times ...

  6. 【学习笔记&训练记录】数位DP

    数位DP,即对数位进行拆分,利用数位来转移的一种DP,一般采用记忆化搜索,或者是先预处理再进行转移 一个比较大略的思想就是可以对于给定的大数,进行按数位进行固定来转移记录答案 区间类型的,可以考虑前缀 ...

  7. 2018牛客网暑假ACM多校训练赛(第四场)C Chiaki Sequence Reloaded (组合+计数) 或 数位dp

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round4-C.html 题目传送门 - https://www.no ...

  8. 牛客训练三:处女座和小姐姐(三)(数位dp)

    题目链接:传送门 思路:数位dp的记忆化搜索模板 从高位向低位枚举,逐位确定每一位的6的个数,dp[i][s]表示处理到第i条边,状态为s时的数字的个数. 注意,要使用long long类型. #in ...

  9. 【2019.7.20 NOIP模拟赛 T2】B(B)(数位DP)

    数位\(DP\) 首先考虑二进制数\(G(i)\)的一些性质: \(G(i)\)不可能有连续两位第\(x\)位和第\(x+1\)位都是\(1\).因为这样就可以进位到第\(x+2\)位.其余情况下,这 ...

随机推荐

  1. 2019.9.5 Balanced Lineup

    题目传送门 板子*3 #include<iostream> #include<cstdio> #include<cstring> #include<cmath ...

  2. 20.包含min函数的栈 Java

    题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 思路 借助辅助栈实现: 压栈时:若辅助栈为空,则将节点压入辅助栈.否则,当当前节点小于 ...

  3. Amdahl定律和可伸缩性

    性能的思考 提升性能意味着可以用更少的资源做更多的事情.但是提升性能会带来额外的复杂度,这会增加线程的安全性和活跃性上的风险. 我们渴望提升性能,但是还是要以安全为首要的.首先要保证程序能够安全正常的 ...

  4. sql 同一张表查询不同数据合并之后关联查询

    SELECT t.articleId articleId, comments.`comments` parentComment, t.commentId commentsId, comments.`i ...

  5. js 给元素绑定回车事件

    经常会看到登录页面输入完账户密码,回车就登录了.实现方法: JQuery方法: $("#focus")为获取id为focus的元素 $("#focus").ke ...

  6. mysql主从复制原理及步骤

    原理: 1master开启bin-log功能,日志文件用于记录数据库的读写增删2需要开启3个线程,master IO线程,slave开启 IO线程 SQL线程,3Slave 通过IO线程连接maste ...

  7. Beta冲刺(2/5)

    队名:new game 组长博客 作业博客 组员情况 鲍子涵(队长) 过去两天完成了哪些任务 验收游戏素材 学习Unity 2D Animation系统 基本做完了人物的各个动画 接下来的计划 冲击E ...

  8. sentinel备忘

    git https://github.com/alibaba/Sentinel   https://github.com/dubbo/dubbo-sentinel-supportdubbo http: ...

  9. 齐普夫-Zipf定律

    python机器学习-乳腺癌细胞挖掘(博主亲自录制视频)https://study.163.com/course/introduction.htm?courseId=1005269003&ut ...

  10. Java对象和集合的拷贝/克隆/复制

    昨天同事遇到了一个奇怪的问题,他需要将一个JavaBean拷贝一份,然后对新创建的Bean进行操作.但是他对新的Bean操作后,会影响旧的Bean的值.当听到这个问题的时候,我第一反应就是他的拷贝方法 ...