数位dp

复习数位dp

数位dp一般用记忆化搜索来解决

观察需要满足的条件,然后计入状态

状态还要记录是否达到上线,以及前导零

比如说这道题

dfs(bit,a4,a8,cnt,last,limit)

由于这道题枚举的时候不可能有前导零,所以就不记录前导零

bit表示当前考虑第bit位,从高到低

a4表示是否有4

a8表示是否有8

cnt记录最多连续出现次数,最大为3,limit记录是否卡上界

枚举这位选什么,如果卡上界,那么从0->st[bit],否则从0->9

然后判断状态是否更改

如果不卡上界记忆化

  1. #include<cstdio>
  2. #include<cstring>
  3. using namespace std;
  4. typedef long long ll;
  5. ll l, r;
  6. int top;
  7. int st[];
  8. ll dp[][][][];
  9. ll dfs(int bit, int a4, int a8, int cnt, int last, int limit)
  10. {
  11. if((a4 & a8)) return ;
  12. if(bit == ) return cnt == ;
  13. if(!limit && dp[bit][a4][a8][cnt] != -) return dp[bit][a4][a8][cnt];
  14. ll ret = ;
  15. int lim = limit ? st[bit] : ;
  16. for(int i = bit == top ? : ; i <= lim; ++i)
  17. {
  18. if(cnt == ) ret += dfs(bit - , a4 || i == , a8 || i == , , i, limit && i == st[bit]);
  19. else ret += dfs(bit - , a4 || i == , a8 || i == , i == last ? cnt + : , i, limit && i == st[bit]);
  20. }
  21. return limit ? ret : dp[bit][a4][a8][cnt] = ret;
  22. }
  23. ll solve(ll n)
  24. {
  25. if(n == 1e10 - ) return ;
  26. top = ;
  27. while(n)
  28. {
  29. st[++top] = n % ;
  30. n /= ;
  31. }
  32. return dfs(top, , , , -, );
  33. }
  34. int main()
  35. {
  36. memset(dp, -, sizeof(dp));
  37. scanf("%lld%lld", &l, &r);
  38. printf("%lld\n", solve(r) - solve(l - ));
  39. return ;
  40. }

bzoj4521的更多相关文章

  1. [BZOJ4521][CQOI2016]手机号码(数位DP)

    4521: [Cqoi2016]手机号码 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 875  Solved: 507[Submit][Status ...

  2. 【BZOJ-4521】手机号码 数位DP

    4521: [Cqoi2016]手机号码 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 303  Solved: 194[Submit][Status ...

  3. BZOJ4521: [Cqoi2016]手机号码

    Description 人们选择手机号码时都希望号码好记.吉利.比如号码中含有几位相邻的相同数字.不含谐音不 吉利的数字等.手机运营商在发行新号码时也会考虑这些因素,从号段中选取含有某些特征的号 码单 ...

  4. 【BZOJ4521】【CQOI2016】手机号码

    感觉数位dp好恶心…… 原题: 人们选择手机号码时都希望号码好记.吉利.比如号码中含有几位相邻的相同数字.不含谐音不 吉利的数字等.手机运营商在发行新号码时也会考虑这些因素,从号段中选取含有某些特征的 ...

  5. BZOJ4521 Cqoi2016 手机号码 【数位DP】

    Description 人们选择手机号码时都希望号码好记.吉利.比如号码中含有几位相邻的相同数字.不含谐音不吉利的数字等.手机运营商在发行新号码时也会考虑这些因素,从号段中选取含有某些特征的号码单独出 ...

  6. [BZOJ4521][Cqoi2016]手机号码 (数位dp)

    题目描述 人们选择手机号码时都希望号码好记.吉利.比如号码中含有几位相邻的相同数字.不含谐音不吉利的数字等.手机运营商在发行新号码时也会考虑这些因素,从号段中选取含有某些特征的号码单独出售.为了便于前 ...

  7. [Bzoj4521][Cqoi2016]手机号码(数位dp)

    4521: [Cqoi2016]手机号码 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 870  Solved: 505[Submit][Status ...

  8. [bzoj4521][Cqoi2016][手机号码] (数位dp+记忆化搜索)

    Description 人们选择手机号码时都希望号码好记.吉利.比如号码中含有几位相邻的相同数字.不含谐音不 吉利的数字等.手机运营商在发行新号码时也会考虑这些因素,从号段中选取含有某些特征的号 码单 ...

  9. 【bzoj4513】储能表【数位DP】

    本来是想去学数位DP,作死挑了这道题,爆炸... 听说正确姿势应该是去做bzoj4521[手机],听说迪克们当场都A了,Orz 然后对于4513,我只想说,一.脸.懵.逼 首先,我是无论如何都无法想到 ...

随机推荐

  1. Java太阳系小游戏分析和源代码

    Java太阳系小游戏分析和源代码 -20150809 近期看了面向对象的一些知识.然后跟着老师的解说做了一个太阳系各行星绕太阳转的小游戏,来练习巩固一下近期学的知识: 用到知识点:类的继承.方法的重载 ...

  2. jquery的一点点认识

    概述 JQuery是继prototype之后又一个优秀的Javascript库.它是轻量级的js库 .它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, O ...

  3. open-source Julius speech-recognition engine

    http://julius.osdn.jp/en_index.php?q=index-en.html Open-Source Large Vocabulary CSR Engine Julius ht ...

  4. vs学习过程中遇见的各种问题

    1.  argument to type "char *"is incompatible with parameter of type "LPWSTR" 解决: ...

  5. kubernetes之初始容器(init container)

    系列目录 理解初始容器 一个pod里可以运行多个容器,它也可以运行一个或者多个初始容器,初始容器先于应用容器运行,除了以下两点外,初始容器和普通容器没有什么两样: 它们总是run to complet ...

  6. kubectl技巧之查看资源列表,资源版本和资源schema配置

    系列目录 在kubernetes里,pod,service,rs,rc,deploy,resource等对象都需要使用yaml文件来创建,很多时候我们都是参照照官方示例或者一些第三方示例来编写yaml ...

  7. Jquery 插件 实例

    先说明下应用场景,通过可配项的配置和默认项覆盖,获取指定的需求数据,填充到指定的位置(两个指定其实都是可配的) (function($) { $.fn.extend({ getOneNews: fun ...

  8. caffe2--ubuntu16.04--14.04--install

    Install Welcome to Caffe2! Get started with deep learning today by following the step by step guide ...

  9. adb tcp 调试

    su setprop service.adb.tcp.port 5555 stop adbd start adbd

  10. Nexus 5更新 Android5.0 失败解决方法

    Android 5.0最终推出了正式版,今天也及时刷到了Android5.0 (LRX21O),官方链接:https://developers.google.com/android/nexus/ima ...