题目链接

小Z的 k 紧凑数

解题思路

数位DP,把每一个数位的每一个数对应的可能性表示出来,然后求\(num(1,r)-num(1,l-1)\),其中\(num(i,j)\)表示\([i,j]\)区间里符合要求的数的个数。

其中,\(dp[i][j]\)表示第\(i\)位数字为\(j\)的选择种数。

计算的时候,比如\(num(456)\),就拆开为\(num(1,99)+num(100,399)+num(400,449)+num(450,455)+num(456,456)\)

AC代码

  1. #include<stdio.h>
  2. long long k,dp[20][14],l,r;
  3. int absf(int a){
  4. if(a<0)return -a;
  5. return a;
  6. }
  7. void dpf(){
  8. int i,j,m;
  9. for(i=0;i<=9;i++)dp[0][i]=1;//个位数,初始化为1
  10. for(i=1;i<20;i++)//这是总共的位数
  11. for(j=0;j<=9;j++)//这是这一位
  12. for(m=0;m<=9;m++)//这是上一位
  13. if(absf(j-m)<=k)dp[i][j]+=dp[i-1][m];//这一位和上一位满足条件则加上
  14. }
  15. long long num(long long x){
  16. int n[20]={0},cnt=0,i,j;
  17. long long ans=0;
  18. while(x>0){
  19. n[cnt++]=x%10;
  20. x/=10;
  21. }
  22. //首位为0
  23. for(i=0;i<cnt-1;i++)
  24. for(j=1;j<=9;j++)
  25. ans+=dp[i][j];
  26. //首位为[1,n[cnt-1])
  27. if(cnt>0)for(i=1;i<n[cnt-1];i++)ans+=dp[cnt-1][i];
  28. //首位为n[cnt-1]
  29. for(i=cnt-2;i>=0;i--){
  30. for(j=0;j<n[i];j++){
  31. if(absf(n[i+1]-j)<=k)ans+=dp[i][j];
  32. }
  33. if(absf(n[i+1]-n[i])>k)break;
  34. //非常重要!!前几位已经不满足绝对值之差不大于k之后就不能再继续下去了
  35. if(!i&&absf(n[i+1]-j)<=k)ans+=dp[i][j];//这里相当于计算那个num(456,456)
  36. }
  37. if(cnt==1)ans++;//这里也相当于计算那个num(456,456),但是个位数不会进入上面那个循环
  38. return ans;
  39. }
  40. int main(){
  41. scanf("%lld%lld%lld",&l,&r,&k);
  42. dpf();
  43. printf("%lld",num(r)-num(l-1));
  44. return 0;
  45. }

P2188 小Z的 k 紧凑数 题解(数位DP)的更多相关文章

  1. 洛谷P2188 小Z的 k 紧凑数

    P2188 小Z的 k 紧凑数 题目描述 小 Z 在草稿纸上列出了很多数,他觉得相邻两位数字差的绝对值不超过 k 的整数特别奇特,称其为 k 紧凑数. 现在小 Z 想知道 [l,r] 内有多少个 k ...

  2. luogu2657-Windy数题解--数位DP

    题目链接 https://www.luogu.org/problemnew/show/P2657 分析 第一道数位DP题,发现有点意思 DP求\([L,R]\)区间内的XXX个数,很套路地想到前缀和, ...

  3. HDU4352 XHXJ's LIS 题解 数位DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4352 题目大意: 求区间 \([L,R]\) 范围内最长上升子序列(Longest increasin ...

  4. HDU5179 beautiful number 题解 数位DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5179 题目大意: 给你一个数 \(A = a_1a_2 \cdots a_n\) ,我们称 \(A\) ...

  5. Ural1057. Amount of Degrees 题解 数位DP

    题目链接: (请自行百度进Ural然后查看题号为1057的那道题目囧~) 题目大意: Create a code to determine the amount of integers, lying ...

  6. POJ-2282题解&数位DP总结

    一.题意 给定一个区间[a, b](注意输入的时候可能a > b,所以,在数据输入后,要先比较a和b,如果a > b,交换a和b的值),统计这个区间里面,数位上有多少个0.多少个1.--. ...

  7. 洛谷P2602 [ZJOI2010]数字计数 题解 数位DP

    题目链接:https://www.luogu.com.cn/problem/P2602 题目大意: 计算区间 \([L,R]\) 范围内 \(0 \sim 9\) 各出现了多少次? 解题思路: 使用 ...

  8. 洛谷P3413 SAC#1 - 萌数 题解 数位DP

    题目链接:https://www.luogu.com.cn/problem/P3413 题目大意: 定义萌数指:满足"存在长度至少为2的回文子串"的数. 求区间 \([L,R]\) ...

  9. HDU3886 Final Kichiku “Lanlanshu” 题解 数位DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3886 题目大意: 给一定区间 \([A,B]\) ,一串由 /, \ , - 组成的符号串.求满足符号 ...

随机推荐

  1. 二进制安装kubernetes(六) kube-proxy组件安装

    Kube-Proxy简述 参考文献: https://ywnz.com/linuxyffq/2530.html 运行在每个节点上,监听 API Server 中服务对象的变化,再通过管理 IPtabl ...

  2. linux无需root挂载iso镜像文件

    引言 起初,我在针对deepin制作一款appimage安装工具,想要其实现的功能就是自动获取图标,只需要输入软件名称和分类即可,当然以后也会寻找方案省去手动输入的麻烦. 后来我发现一个有趣的问题 o ...

  3. Leetcode(17)-电话号码的字母组合

    给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23" 输出:[&quo ...

  4. 计蒜客 第四场 C 商汤科技的行人检测(中等)平面几何好题

    商汤科技近日推出的 SenseVideo 能够对视频监控中的对象进行识别与分析,包括行人检测等.在行人检测问题中,最重要的就是对行人移动的检测.由于往往是在视频监控数据中检测行人,我们将图像上的行人抽 ...

  5. matplotlib 单figure多图

    method 1 import numpy as np import matplotlib.pyplot as plt fg, axes = plt.subplots(1, 2, figsize=(1 ...

  6. Code Book All In One

    Code Book All In One Jupyter Notebook Jupyter Lab https://jupyter.org/ Storybook https://storybook.j ...

  7. 口罩 & 防毒面具 N95 & P100

    口罩 & 防毒面具 N95 & P100 N95 口罩 < 防毒面具 P100 https://www.techritual.com/2020/01/30/210599/

  8. js navigator.wakeLock 保持屏幕唤醒状态

    let lock; btn.addEventListener("click", async () => { try { if (lock) { lock.release(); ...

  9. 呼叫河马——搭建在NGK公链上的去中心化智能合约DAPP

    基于区块链技术发展的DAPP是一种分布式应用生态系统.目前最受DAPP欢迎的区块链有以太坊.EOS.波场等公链. 但由于当前 EOS资源模型的局限性,使得其使用成本较高.尽管 EOS的DPOS共识机制 ...

  10. 你真的知道typeof null的结果为什么是‘object‘吗?

    到目前为止,ECMAScript 标准中定义了8种数据类型,它们分别是Undefined.Null.Number.Boolean.String.Symbol.BigInt.Object. 为了判断变量 ...