P4127 [AHOI2009]同类分布
P4127 [AHOI2009]同类分布
题解
好的,敲上数位DP DFS板子
记录一下填的各位数字之和 sum ,然后记录一下原数 yuan
最后判断一下 yuan%sum==0 不就好啦???
突然意识到 dp 数组咋存???
dp[pos][sum][yuan]
pos , sum 都可以记录,但是 yuan ??? 1e18???
我们可以把yuan取模啊!
yuan%mod ?
取模啥呢???如果固定一个取模数字,结果很有可能就不对了,那就枚举吧
看到原式 yuan%sum ?= 0
mod = 1~sum 好啦
yuan%mod = 0 并且 sum=mod 不就相当于 yuan%sum==0 么
所以 dp[pos][sum][yuan%mod]
代码
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<queue> using namespace std; typedef long long ll; inline ll read()
{
ll ans=;
char last=' ',ch=getchar();
while(ch<''||ch>'') last=ch,ch=getchar();
while(ch>=''&&ch<='') ans=ans*+ch-'',ch=getchar();
if(last=='-') ans=-ans;
return ans;
} ll a,b;
ll c[],len=;
ll dp[][][];
ll mod; ll dfs(ll pos,ll sum,ll k,ll yuan,bool limit,bool qdl)
{
if(pos<=) return sum==mod&&k==;
if(!limit&&!qdl&&dp[pos][sum][k]!=-) return dp[pos][sum][k];
ll ans=;
ll up=limit?c[pos]:;
for(ll i=;i<=up;i++)
ans+=dfs(pos-,sum+i,(yuan*+i)%mod,yuan*+i,limit&&(i==up),qdl&&(i==));
if(!limit&&!qdl) dp[pos][sum][k]=ans;
return ans;
} ll fun(ll x)
{
memset(c,,sizeof(c));len=;
while(x)
{
c[++len]=x%;
x/=;
} ll ans=;
for(mod=;mod<=len*;mod++)
{
memset(dp,-,sizeof(dp));
ans+=dfs(len,,,,,);
}
return ans;
} int main()
{
a=read();b=read();
printf("%lld\n",fun(b)-fun(a-)); return ;
}
P4127 [AHOI2009]同类分布的更多相关文章
- 洛谷 P4127 [AHOI2009]同类分布 解题报告
P4127 [AHOI2009]同类分布 题目描述 给出两个数\(a,b\),求出\([a,b]\)中各位数字之和能整除原数的数的个数. 说明 对于所有的数据,\(1 ≤ a ≤ b ≤ 10^{18 ...
- 洛谷 P4127 [AHOI2009]同类分布
题意简述 求l~r之间各位数字之和能整除原数的数的个数. 题解思路 数位DP 代码 #include <cstdio> #include <cstring> typedef l ...
- 【BZOJ1799】[AHOI2009]同类分布(动态规划)
[BZOJ1799][AHOI2009]同类分布(动态规划) 题面 BZOJ 洛谷 题解 很容易想到数位\(dp\),然而数字和整除原数似乎不好记录.没关系,直接枚举数字和就好了,这样子就可以把整除原 ...
- [BZOJ1799][AHOI2009]同类分布(数位DP)
1799: [Ahoi2009]self 同类分布 Time Limit: 50 Sec Memory Limit: 64 MBSubmit: 1635 Solved: 728[Submit][S ...
- 【数位DP】【P4127】[AHOI2009]同类分布
Description 给出两个数 \(a,~b\) 求出 \([a~,b]\) 中各位数字之和能整除原数的数的个数. Limitations \(1 \leq a,~b \leq 10^{18}\) ...
- 【[AHOI2009]同类分布】
这是一篇有些赖皮的题解 (如果不赖皮的话,bzoj上也是能卡过去的) 首先由于我这个非常\(sb\)的方法复杂度高达\(O(171^4)\),所以面对极限的\(1e18\)的数据实在是卡死了 但是这个 ...
- [AHOI2009]同类分布
题目大意: 问在区间[l,r]内的正整数中,有多少数能被其个位数字之和整除. 思路: 数位DP. 极端情况下,每一位都是9,所以各位数字之和不超过9*18.(为了方便这里用了9*19) f[i][j] ...
- 【题解】AHOI2009同类分布
好开心呀~果然只有不看题解做出来的题目才会真正的有一种骄傲与满足吧ヾ(๑╹◡╹)ノ" 实际上这题只要顺藤摸瓜就可以了.首先按照数位dp的套路,有两维想必是省不掉:1.当前dp到到的位数:2. ...
- [luogu4127 AHOI2009] 同类分布 (数位dp)
传送门 Solution 裸数位dp,空间存不下只能枚举数字具体是什么 注意memset最好为-1,不要是0,有很多状态答案为0 Code //By Menteur_Hxy #include < ...
随机推荐
- 13.SpringMVC核心技术-异常处理
常用的SpringMVC异常处理方式主要是三种: 1.使用系统定义好的异常处理器 SimpleMappingExceptionResolver 2.使用自定义异常处理器 3.使用异常处理注解 Si ...
- python多继承下的查找顺序-MRO原则演变与C3算法
在python历史版本中的演变史 python2.2之前: MRO原则: 只有经典类,遵循深度优先(从左到右)原则, 存在的问题:在有重叠的多继承中,违背重写可用原则 解决办法是再设计类的时候不要设计 ...
- PAT Advanced 1155 Heap Paths (30 分)
In computer science, a heap is a specialized tree-based data structure that satisfies the heap prope ...
- Python---virtualenv + Tensorflow + 安装jupyter notebook
一.ubuntu系统下安装完caffe后,安装 jupyter notebook. 在终端中执行,安装指令: sudo pip install jupyter 安装完成后运行 notebook : j ...
- 关于C++ Builder Codegurad 问题的排查。
关于C++ BUILDER6 我目前不知道有什么特别好的内存排查工具.尤其为了对付memory leak, (Eurekalog 这个工具内存泄漏主要针对delphi,BCB配置比较繁琐). 除了BC ...
- centos wireshark
root安装: yum install wireshark yum install wireshark-gnome wireshark error: There are no interfaces o ...
- JS 字符串转字节截取
/* * param str 要截取的字符串 * param L 要截取的字节长度,注意是字节不是字符,一个汉字两个字节 * return 截取后的字符串 */ function CutStr(str ...
- SparkStreaming使用checkpoint存在的问题及解决方案
sparkstreaming关于偏移量的管理 在 Direct DStream初始化的时候,需要指定一个包含每个topic的每个分区的offset用于让Direct DStream从指定位置读取数据. ...
- location - URL
1.hash:获取或设置href 属性中跟在数字符号 # 之后的内容 2.跳转页面: 1)location.href 2)location.replace() 3)location.reload(tr ...
- lite-monitor 一款基于shell命令的监控系统
介绍 lite-monitor 一款基于shell命令的监控系统,可以根据项目中输出的日志定时输出或者统计输出,并发送钉钉机器人报警消息. lite-monitor能做什么: 定时监控某个服务进程是否 ...