洛谷传送门

文章目录

  • 题目描述
  • 解析
  • 代码

题目描述

给出两个数a,b求出[a,b]中各位数字之和能整除原数的数的个数。
1<=a<=b<=1018

解析

容易想到数位dp
但本题的难点是如果只记录数位和sum与取模的结果res,因为取模的除数发生改变,难以转移
如何解决?
刚才也提到,本题的难点在于模数发生改变,所以我们就尝试强制使取模的数不变
我们发现,因为a、b范围有限,所以这个数位和的范围也是很有限的
因此可以枚举数位和分别求解再累加答案
问题得到解决

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int M = 3000500;
const int N = 200;
//const int mod=1e9+7;
int n;
ll dp[20][N][N];//dp[pos][mod][sum][res]
ll a[20];
ll l,r;
int Mod=190;
ll mi[22];
ll find(int pos,int mod,int sum,int res,int lim){//  for(int i=pos;i<n;i++)printf("  ");
//  printf("pos=%d mod=%d sum=%d res=%d lim=%d mx=%d\n",pos,mod,sum,res,lim,lim?a[pos]:9);if(pos==0) return sum==mod&&res==0;if(sum>mod) return 0;if(!lim&&dp[pos][sum][res]!=-1) return dp[pos][sum][res];ll ans=0;int mx= lim?a[pos]:9;for(int i=0;i<=mx;i++){ll res1=(ll)((ll)mi[pos-1]*i+res)%mod;
//      for(int j=pos;j<n;j++)printf("  ");
//      printf("  i=%d res1=%lld\n",i,res1);ans+=find(pos-1,mod,sum+i,res1,lim&&i==mx);}if(!lim) dp[pos][sum][res]=ans;
//  for(int i=pos;i<n;i++)printf("  ");
//  printf("return %d\n",ans);return ans;
}
ll solve(ll x){n=0;while(x){a[++n]=x%10;x/=10;}ll tot=0;for(int i=1;i<=Mod;i++){memset(dp,-1,sizeof(dp));tot+=find(n,i,0,0,1);}return tot;
}
int main() {mi[0]=1;for(int i=1;i<=20;i++) mi[i]=mi[i-1]*10;scanf("%lld%lld",&l,&r);printf("%lld\n",solve(r)-solve(l-1));
//  int now,pre;
//  for(int i=1;i<=100;i++){//      now=solve(i);
//      if(now==pre+1) printf("i=%d ans=%d\n",i,solve(i));
//      pre=now;
//  }return 0;
}
/*
1100
*/

P4127 [AHOI2009]同类分布(数位dp)相关推荐

  1. P4127 [AHOI2009]同类分布 数位dp + 对状态剪枝

    传送门 文章目录 题意: 思路: 题意: 思路: 比较套路的题,首先也有个明显的状态f[pos][num][sum]f[pos][num][sum]f[pos][num][sum]表示到了pospos ...

  2. P4127 [AHOI2009]同类分布

    链接:https://www.luogu.org/problemnew/show/P4127 题目描述 给出两个数 a,ba,b ,求出 [a,b][a,b] 中各位数字之和能整除原数的数的个数. 输 ...

  3. 洛谷 P4127 [AHOI2009]同类分布

    题意简述 求l~r之间各位数字之和能整除原数的数的个数. 题解思路 数位DP 代码 #include <cstdio> #include <cstring> typedef l ...

  4. 【题解】 P4127 [AHOI2009]同类分布

    \(Description:\) 给出两个数a,b,求出\([a,b]\)中各位数字之和能整除原数的数的个数. $Sample $ \(Input:\) 10 19 \(Sample\) \(Outp ...

  5. [AHOI2009]同类分布

    题目描述 给出两个数a,b,求出[a,b]中各位数字之和能整除原数的数的个数. 输入格式 一行,两个整数a和b 输出格式 一个整数,表示答案 输入输出样例 输入 #1 10 19 输出 #1 3 说明 ...

  6. 数位dp 的简单入门

    时间紧张,就不讲那么详细了. 之前一直被深搜代码误解,以为数位dp 其实就是记忆化深搜...(虽说爆搜确实很舒服而且还好想) 但是后来发现数位dp 的标准格式其实是 预处理 + dp ...... 数 ...

  7. 数位dp真·浅谈 By cellur925

    预警:由于是从$Vergil$学长那里和$Mathison$大神那里学来的,所以清一色记忆化搜索!qwq 巨佬的数位dp讲解(未来的咕咕日报头条): https://www.luogu.org/blo ...

  8. bzoj 1799: [Ahoi2009]self 同类分布(数位DP)

    1799: [Ahoi2009]self 同类分布 Time Limit: 50 Sec  Memory Limit: 64 MB Submit: 1358  Solved: 592 [Submit] ...

  9. BZOJ 1799 [Ahoi2009] self 同类分布(数位DP)【BZOJ千题计划(quexin】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/1799(样例时限设置有问题,应该为 2 ...

最新文章

  1. Android之NDK开发的简单实例
  2. wcf服务和寄主的关系
  3. java.lang.IllegalStateException Unable to find a @SpringBootConfiguration错误解决方案(亲测)
  4. MybatisPlus性能分析插件
  5. 解决 Gradle 进行多模块开发时,模块相互依赖的问题
  6. 使用hotnode自动更新脚本(热发布)
  7. 在屏幕上打印杨辉三角
  8. springboot项目中关于时间类型转换的格式问题
  9. java加密 js解密_【Java】JavaScript 加密 Java 解密
  10. 公众平台模板消息所在行业_微信公众号模板消息群发常见问题汇总
  11. 凸包, 圆角矩阵凸包, 点的旋转,任意多边形外角和为360度, 绕着某点进行旋转
  12. Flutter Animation 3D仿真书本翻页动画效果
  13. C语言截取整数的某些位编程,C语言中位运算的巧用(转)
  14. 【华为OD机试真题 Python】判断字符串子序列
  15. android app后台收不到消息,不打开智能关怀App收不到手表发的消息
  16. 进位位判别法_图解停车进位方法及如何确定车距
  17. 基于数字电路交通灯信号灯控制系统设计-基于单片机病房温度监测与呼叫系统设计-基于STM32的无线蓝牙心电监护仪系统设计-基于STM32的智能蓝牙温控风扇控制设计-基于STM32的智能温室控制系统设计
  18. 【转】楼天城楼教主的acm心路历程(作为励志用)
  19. fscanf()php,fscanf()函数fscanf
  20. 细说汽车电子通信总线之CAN 2.0 总线协议详解

热门文章

  1. linux挂载4t硬盘用不了,centos7挂载新加4T硬盘到/home目录
  2. python姓名输出语句_Python最基本的输入输出详解
  3. php ip处理函数,PHP取ip地址函数
  4. 使有用计算机不注意卫生,保护眼睛注意细节有哪些
  5. freertos源码详解与应用开发 pdf_互联网企业面试必问Spring源码?搞定Spring源码,看完这篇就够了...
  6. mongodb可视化工具 linux,Linux中安装启动MongoDB与可视化工具
  7. mysql中有没有单行函数_MySQL之函数(单行函数、分组函数)
  8. java使用教程——组件及事件处理——窗口(设置窗口的颜色和背景)
  9. 算法设计与分析——动态规划——数字三角形问题
  10. 高等数学上-赵立军-北京大学出版社-题解-练习5.8