难受啊,怎么又遇到我不会的题了(捂脸)

如题,这是一道数位DP,随便找了个博客居然就是我们大YZ的……果然nb,然后就是改改模版++注释就好的了,直接看注释吧,就是用1~B - 1~A-1而已,枚举全部位然后判一下是不是上限边缘和前导零就OK

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
LL bit[20];int len,a[20];
LL as[10],ret[20];//ret表示假如是上限边缘,后面有多少种填的方式
LL f[20][2][2];
//f[k][fg][z]表示当前这个数x,搞到第k位的时候的数目
//fg表示该位是不是在上限边缘 z表示目前是否还是前导零
LL dfs(int x,int k,int fg,int z)
{if(k==len+1)return 0;if(f[k][fg][z]!=-1)return f[k][fg][z];LL ans=0;if(fg==1)//如果前面的部分处于上限边缘
    {for(int i=0;i<a[k];i++)//不填上限边缘,枚举填什么
        {if(z==1&&i==0)ans+=dfs(x,k+1,0,1);else{ans+=dfs(x,k+1,0,0);if(i==x)ans+=bit[len-k];}//如果i是要统计次数的那个数字,而且不是在前导零的时候,而且还不是在上限的边缘//那么后面几位的数字有多少种填法x就出现了几次
        }//该位填上限边缘if(z==1&&a[k]==0)ans+=dfs(x,k+1,1,1);else {ans+=dfs(x,k+1,1,0);if(a[k]==x)ans+=ret[k];}//如果填的是要统计次数的那个数字 而且不是在前导零的时候//那么后面的数字最多有多少种填法x就出现了几次
    }else//没有限制
    {for(int i=0;i<=9;i++)//同上
        {if(z==1&&i==0)ans+=dfs(x,k+1,0,1);else {ans+=dfs(x,k+1,0,0);if(i==x)ans+=bit[len-k];}}}f[k][fg][z]=ans;return ans;
}
char s[20];
void cl()//把A减1
{int t=len;while(t>1&&s[t]=='0'){s[t]='9';t--;}s[t]--;if(s[t]==0){len--;for(int i=1;i<=len;i++)s[i]=s[i+1]-'0';}
}
int main()
{freopen("dream.in","r",stdin);freopen("dream.out","w",stdout);bit[0]=1;for(int i=1;i<=18;i++)bit[i]=bit[i-1]*10;memset(as,0,sizeof(as));scanf("%s",s+1);len=strlen(s+1);cl();for(int i=1;i<=len;i++)a[i]=s[i]-'0';//0的情况,所以填的方案都要+1 ret[len]=1;for(int i=len-1;i>=1;i--)ret[i]=a[i+1]*bit[len-i-1]+ret[i+1];for(int i=0;i<=9;i++){memset(f,-1,sizeof(f));as[i]-=dfs(i,1,1,1);}scanf("%s",s+1);len=strlen(s+1);for(int i=1;i<=len;i++)a[i]=s[i]-'0';ret[len]=1;for(int i=len-1;i>=1;i--)ret[i]=a[i+1]*bit[len-i-1]+ret[i+1];for(int i=0;i<=9;i++){memset(f,-1,sizeof(f));as[i]+=dfs(i,1,1,1);}for(int i=0;i<9;i++)printf("%d ",as[i]);printf("%d\n",as[9]);return 0;
}

转载于:https://www.cnblogs.com/AKCqhzdy/p/7716156.html

bzoj1833: [ZJOI2010]count 数字计数USACO37 Cow Queueing 数数的梦(数位DP)相关推荐

  1. bzoj1833: [ZJOI2010]count 数字计数(数位DP+记忆化搜索)

    1833: [ZJOI2010]count 数字计数 题目:传送门 题解: 今天是躲不开各种恶心DP了??? %爆靖大佬啊!!! 据说是数位DP裸题...emmm学吧学吧 感觉记忆化搜索特别强: 定义 ...

  2. [BZOJ1833][ZJOI2010]Count数字计数(DP)

    数位DP学傻了,怎么写最后都写不下去了. 这题严格上来说应该不属于数位DP?只是普通DP加上一些统计上的判断吧. 首先复杂度只与数的位数$\omega$有关,所以怎么挥霍都不会超. f[i][j][k ...

  3. bzoj1833: [ZJOI2010]count 数字计数 codevs1359 数字计数

    bzoj1833 codevs1359 这道题也是道数位dp 因为0有前导0这一说卡了很久 最后发现用所有位数减1~9的位数就okay.....orzczl大爷 其他就跟51nod那道统计1出现次数一 ...

  4. 【bzoj 1833】【codevs 1359】 [ZJOI2010]count 数字计数(数位dp)

    1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec  Memory Limit: 64 MB Submit: 2774  Solved: 1230 [Submit ...

  5. 1833: [ZJOI2010]count 数字计数

    1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec  Memory Limit: 64 MB Submit: 2951  Solved: 1307 [Submit ...

  6. bzoj 1833: [ZJOI2010]count 数字计数(数字0-9的个数)

    1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec  Memory Limit: 64 MB Submit: 3528  Solved: 1553 [Submit ...

  7. BZOJ 1833 ZJOI2010 count 数字计数 数位DP

    题目大意:求[a,b]间全部的整数中0~9每一个数字出现了几次 令f[i]为i位数(算前导零)中每一个数出现的次数(一定是同样的,所以仅仅记录一个即可了) 有f[i]=f[i-1]*10+10^(i- ...

  8. BZOJ 1833: [ZJOI2010]count 数字计数

    1833 思路:数位dp 代码: #include<bits/stdc++.h> using namespace std; #define fi first #define se seco ...

  9. [ZJOI 2010]count 数字计数

    Description 题库链接 问你 \([l,r]\) 区间内所有整数中各个数码出现了多少次. \(1\leq a\leq b\leq 10^{12}\) Solution 数位 \(DP\) . ...

最新文章

  1. Java中Properties类的操作
  2. 阿里云自研数据库支撑双11,助力电商客户订单峰值突破每秒20万笔
  3. Leet Code OJ 4. Median of Two Sorted Arrays [Difficulty: Hard]
  4. spring—拦截器和异常
  5. 结合webpack配置_呕心沥血编写的webpack多入口零基础配置 【建议收藏】
  6. 高性能计算GPU解决方案系列课程一--高性能计算简介
  7. java 在类中定义接口_我们可以在Java接口中定义一个类吗?
  8. 制作NUGET包制作nupkg包
  9. Linux系统CentOS 7中安装配置JDK
  10. 计算机二级office查分数,3月份office计算机二级内网查分90,写下一点经验给后来人...
  11. 详解minigui图片加载及显示
  12. 如何权衡实习转正和秋招?我想给你这几条建议
  13. 什么是依赖注入,vue的依赖注入如何实现的
  14. 【MySQL】mysql数据库操作指南
  15. LED屏显示模块的组成及工作原理介绍
  16. 硬解码和软解码的区别
  17. 我的世界1.12.2java下载_我的世界1.12.2手机版下载-我的世界1.12.2正式版下载v1.12.2 安卓最新版-2265手游网...
  18. 广州科源980tc数控系统说明书_广州数控GSK928TCa 车床数控系统 使用手册中文.pdf...
  19. sublime3不支持GBK导致中文乱码
  20. 277套自动输送线图纸输送机链板流水线倍速链皮带线SW机械设计

热门文章

  1. 重磅!阿里开源自研语音识别模型DFSMN,准确率高达96.04%
  2. sqlserver日期dateadd及STUFF等应用
  3. 游戏基础体验研究:玩家想要什么样的美术品质?
  4. 这家工作室花三年把塞尔达做进RogueLike里面
  5. 高级UI之Paint(滤镜,颜色通道,矩阵运算)
  6. 第十届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)
  7. SQL基础【十五、join、Inner join、Left join、Right join、Full join】
  8. Oracle Recyclebin
  9. python 面向对象之:反射,双下方法
  10. idea去除重复代码校验