P4127 [AHOI2009]同类分布(数位dp)
洛谷传送门
文章目录
- 题目描述
- 解析
- 代码
题目描述
给出两个数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)相关推荐
- P4127 [AHOI2009]同类分布 数位dp + 对状态剪枝
传送门 文章目录 题意: 思路: 题意: 思路: 比较套路的题,首先也有个明显的状态f[pos][num][sum]f[pos][num][sum]f[pos][num][sum]表示到了pospos ...
- P4127 [AHOI2009]同类分布
链接:https://www.luogu.org/problemnew/show/P4127 题目描述 给出两个数 a,ba,b ,求出 [a,b][a,b] 中各位数字之和能整除原数的数的个数. 输 ...
- 洛谷 P4127 [AHOI2009]同类分布
题意简述 求l~r之间各位数字之和能整除原数的数的个数. 题解思路 数位DP 代码 #include <cstdio> #include <cstring> typedef l ...
- 【题解】 P4127 [AHOI2009]同类分布
\(Description:\) 给出两个数a,b,求出\([a,b]\)中各位数字之和能整除原数的数的个数. $Sample $ \(Input:\) 10 19 \(Sample\) \(Outp ...
- [AHOI2009]同类分布
题目描述 给出两个数a,b,求出[a,b]中各位数字之和能整除原数的数的个数. 输入格式 一行,两个整数a和b 输出格式 一个整数,表示答案 输入输出样例 输入 #1 10 19 输出 #1 3 说明 ...
- 数位dp 的简单入门
时间紧张,就不讲那么详细了. 之前一直被深搜代码误解,以为数位dp 其实就是记忆化深搜...(虽说爆搜确实很舒服而且还好想) 但是后来发现数位dp 的标准格式其实是 预处理 + dp ...... 数 ...
- 数位dp真·浅谈 By cellur925
预警:由于是从$Vergil$学长那里和$Mathison$大神那里学来的,所以清一色记忆化搜索!qwq 巨佬的数位dp讲解(未来的咕咕日报头条): https://www.luogu.org/blo ...
- bzoj 1799: [Ahoi2009]self 同类分布(数位DP)
1799: [Ahoi2009]self 同类分布 Time Limit: 50 Sec Memory Limit: 64 MB Submit: 1358 Solved: 592 [Submit] ...
- BZOJ 1799 [Ahoi2009] self 同类分布(数位DP)【BZOJ千题计划(quexin】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/1799(样例时限设置有问题,应该为 2 ...
最新文章
- Android之NDK开发的简单实例
- wcf服务和寄主的关系
- java.lang.IllegalStateException Unable to find a @SpringBootConfiguration错误解决方案(亲测)
- MybatisPlus性能分析插件
- 解决 Gradle 进行多模块开发时,模块相互依赖的问题
- 使用hotnode自动更新脚本(热发布)
- 在屏幕上打印杨辉三角
- springboot项目中关于时间类型转换的格式问题
- java加密 js解密_【Java】JavaScript 加密 Java 解密
- 公众平台模板消息所在行业_微信公众号模板消息群发常见问题汇总
- 凸包, 圆角矩阵凸包, 点的旋转,任意多边形外角和为360度, 绕着某点进行旋转
- Flutter Animation 3D仿真书本翻页动画效果
- C语言截取整数的某些位编程,C语言中位运算的巧用(转)
- 【华为OD机试真题 Python】判断字符串子序列
- android app后台收不到消息,不打开智能关怀App收不到手表发的消息
- 进位位判别法_图解停车进位方法及如何确定车距
- 基于数字电路交通灯信号灯控制系统设计-基于单片机病房温度监测与呼叫系统设计-基于STM32的无线蓝牙心电监护仪系统设计-基于STM32的智能蓝牙温控风扇控制设计-基于STM32的智能温室控制系统设计
- 【转】楼天城楼教主的acm心路历程(作为励志用)
- fscanf()php,fscanf()函数fscanf
- 细说汽车电子通信总线之CAN 2.0 总线协议详解
热门文章
- linux挂载4t硬盘用不了,centos7挂载新加4T硬盘到/home目录
- python姓名输出语句_Python最基本的输入输出详解
- php ip处理函数,PHP取ip地址函数
- 使有用计算机不注意卫生,保护眼睛注意细节有哪些
- freertos源码详解与应用开发 pdf_互联网企业面试必问Spring源码?搞定Spring源码,看完这篇就够了...
- mongodb可视化工具 linux,Linux中安装启动MongoDB与可视化工具
- mysql中有没有单行函数_MySQL之函数(单行函数、分组函数)
- java使用教程——组件及事件处理——窗口(设置窗口的颜色和背景)
- 算法设计与分析——动态规划——数字三角形问题
- 高等数学上-赵立军-北京大学出版社-题解-练习5.8