求一个区间内的数含有多少个0.

dp[len][pre]表示长度为len的数,含有pre个0.

需要加一个标记,来表示前缀是否为0(可以是一串连续的0),如果前缀一直为0,就一直搜,如果前缀不为0,就可以用到dp[len-1][pre+1]或者dp[len-1][pre]

了,如果前缀的最后一位是0,就是dp[len-1][pre+1],如果前缀的最后一位不是0,就是dp[len-1][pre],当然了第一次肯定是需要先搜的.

  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <cstdio>
  4. #include <cstring>
  5. using namespace std;
  6. #define LL long long
  7. #define maxn 30
  8. LL dp[maxn][maxn];//代表长度为len的数字,有多少个0
  9. LL digit[maxn];
  10. int LEN;
  11. LL dfs(int len,LL pre,int flag,bool fp) //dfs版本的纯属暴力枚举每一个数字,而递推版本的是考虑了前缀的影响
  12. {
  13. if(len==)
  14. {
  15. if(flag)
  16. return ;
  17. else
  18. return pre;
  19. }
  20. if(!fp && dp[len][pre] != - && !flag) //如果之前的数字不全是0,可以直接用
  21. {
  22. return dp[len][pre];
  23. }
  24. LL ret =;
  25. int fpmax = fp ? digit[len] : ;
  26. for(int i=;i<=fpmax;i++) //分别算出以i开头的数的方案数,
  27. {
  28. LL temp=;
  29. if(flag) //如果之前一直是0
  30. {
  31. temp=dfs(len-,pre,flag && (i==),fp && i==fpmax);
  32. ret+=temp;
  33. }
  34. else
  35. {
  36. if(i==)
  37. {
  38. temp=dfs(len-,pre+,flag,fp && i==fpmax);
  39. ret+=temp;
  40. }
  41. else
  42. {
  43. temp=dfs(len-,pre,flag,fp && i==fpmax);
  44. ret+=temp;
  45. }
  46. }
  47. }
  48. if(!fp && !flag) //如果之前的数字不全是0
  49. dp[len][pre]= ret;
  50. return ret;
  51. }
  52.  
  53. LL f(LL n)
  54. {
  55. if(n==-)
  56. return ;
  57. int len=;
  58. while(n)
  59. {
  60. digit[++len] = n % ;
  61. n /= ;
  62. }
  63. LL ans=;
  64. // LEN=len;
  65. ans+=dfs(len,,,true);
  66. return ans;
  67. }
  68. void init()
  69. {
  70. memset(dp,-,sizeof(dp));
  71. }
  72. int main()
  73. {
  74. //freopen("test.txt","r",stdin);
  75. int t;
  76. scanf("%d",&t);
  77. int Case=;
  78. while(t--)
  79. {
  80. init();
  81. LL n,m;
  82. scanf("%lld%lld",&n,&m);
  83. LL ans1=f(m);
  84. // printf("%lld\n",ans1);
  85. init();
  86. LL ans2=f(n-);
  87. // printf("%lld\n",ans2);
  88. printf("Case %d: %lld\n",++Case,ans1-ans2);
  89. }
  90. return ;
  91. }

Lightoj 1140(数位DP)的更多相关文章

  1. lightoj 1021 (数位DP)

    题意:给你一个b进制的数,再给你一个十进制数k,你可以重新排列b进制数的每一位得到其他b进制数,问你这些数中有多少可以整除k? 思路:数位dp. #include <cstdio> #in ...

  2. LightOJ - 1032 数位DP

    #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #i ...

  3. Lightoj 1068(数位DP)

    求一段区间中被k整除,各个位数相加之和被k整除的数的个数. 这不是重点,重点是k太大了,最大值有10000,所以不能直接开那么大的数组. 仔细分析一下可以发现,由于数最大是2的31次方(2147483 ...

  4. lightoj 1205 数位dp

    1205 - Palindromic Numbers    PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 3 ...

  5. 数位dp(D - How Many Zeroes? LightOJ - 1140 )

    题目链接:https://cn.vjudge.net/contest/278036#problem/D 题目大意:T组测试数据,每一次输入两个数,求的是在这个区间里面,有多少个0,比如说19203包括 ...

  6. LightOJ 1140 计数/数位DP 入门

    题意: 给出a,b求区间a,b内写下过多少个零 题解:计数问题一般都会牵扯到数位DP,DP我写的少,这道当作入门了,DFS写法有固定的模板可套用 dp[p][count] 代表在p位 且前面出现过co ...

  7. LightOJ 1140: How Many Zeroes? (数位DP)

    当前数位DP还不理解的点: 1:出口用i==0的方式 2:如何省略状态d(就是枚举下一个数的那个状态.当然枚举还是要的,怎么把空间省了) 总结: 1:此类DP,考虑转移的时候,应当同时考虑查询时候的情 ...

  8. LightOJ 1140 How Many Zeroes? (数位DP)

    题意:统计在给定区间内0的数量. 析:数位DP,dp[i][j] 表示前 i 位 有 j 个0,注意前导0. 代码如下: #pragma comment(linker, "/STACK:10 ...

  9. LightOJ 1032 - Fast Bit Calculations 数位DP

    http://www.lightoj.com/volume_showproblem.php?problem=1032 题意:问1~N二进制下连续两个1的个数 思路:数位DP,dp[i][j][k]代表 ...

随机推荐

  1. 2016阿里校招python研发面试

    一面: 面:说说你们学校的主修课程. 学校开的全是尼玛java课,这个我是想了有一会的. 面:看你简历写了会jquery,来问你个简单的jquery问题 :jQuery支不支持css引入. 呵呵 面: ...

  2. c++之析构函数

    #include<iostream>using namespace std;class A{   public:    A(){cout<<"A constructi ...

  3. 【BZOJ1492】货币兑换Cash(CDQ分治)

    题意: 小 Y 最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A 纪 念券(以下简称 A 券)和 B 纪念券(以下简称 B 券).每个持有金券的顾客都有 一个自己的帐户.金券的数目可以是一 ...

  4. ES6__函数的扩展

    /** * 函数的扩展 * 1 为函数参数指定默认值 * 2 函数的 rest 参数 * 3 箭头函数 */ // ------------------------------------------ ...

  5. nginx.org与nginx.com有什么区别(Nginx与Nginx Plus)

    nginx.org是开源社区,管理着Nginx开源版. nginx.xom是商业社区,管理着Nginx Plus商业版. 商业版和开源版是有很大区别的,服务还加更强大的功能,当然依托开源社区加载第三方 ...

  6. spring mvc 选中多文件同时上传(利用input元素的multiple属性)

    原文:http://m.blog.csdn.net/article/details?id=51351388 <!DOCTYPE html> <html> <head> ...

  7. 从日志文件解决ArcGIS Server性能低下问题的步骤(1)

    日志级别和结构 http://www.cnblogs.com/fortoday/archive/2011/03/30/2000348.html ArcGIS Server日志文件分为几个记录级别: 无 ...

  8. 【转】AOP

    原文:http://blog.csdn.net/zhoudaxia/article/details/38502347 .---------------------------------------- ...

  9. 一天教你入门struts2

    写在前面 自己也是一个java和java web的菜鸟.之前没有接触过java web方面的开发 想通过一个小项目,来熟悉struts2的开发流程 一个有趣的想法源于教研室项目上的一个功能实现–自己主 ...

  10. Android网络编程之使用HTTP訪问网络资源

    使用HTTP訪问网络资源 前面介绍了 URLConnection己经能够很方便地与指定网站交换信息,URLConnection另一个子类:HttpURLConnection,HttpURLConnec ...