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]同类分布的更多相关文章

  1. 洛谷 P4127 [AHOI2009]同类分布 解题报告

    P4127 [AHOI2009]同类分布 题目描述 给出两个数\(a,b\),求出\([a,b]\)中各位数字之和能整除原数的数的个数. 说明 对于所有的数据,\(1 ≤ a ≤ b ≤ 10^{18 ...

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

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

  3. 【BZOJ1799】[AHOI2009]同类分布(动态规划)

    [BZOJ1799][AHOI2009]同类分布(动态规划) 题面 BZOJ 洛谷 题解 很容易想到数位\(dp\),然而数字和整除原数似乎不好记录.没关系,直接枚举数字和就好了,这样子就可以把整除原 ...

  4. [BZOJ1799][AHOI2009]同类分布(数位DP)

    1799: [Ahoi2009]self 同类分布 Time Limit: 50 Sec  Memory Limit: 64 MBSubmit: 1635  Solved: 728[Submit][S ...

  5. 【数位DP】【P4127】[AHOI2009]同类分布

    Description 给出两个数 \(a,~b\) 求出 \([a~,b]\) 中各位数字之和能整除原数的数的个数. Limitations \(1 \leq a,~b \leq 10^{18}\) ...

  6. 【[AHOI2009]同类分布】

    这是一篇有些赖皮的题解 (如果不赖皮的话,bzoj上也是能卡过去的) 首先由于我这个非常\(sb\)的方法复杂度高达\(O(171^4)\),所以面对极限的\(1e18\)的数据实在是卡死了 但是这个 ...

  7. [AHOI2009]同类分布

    题目大意: 问在区间[l,r]内的正整数中,有多少数能被其个位数字之和整除. 思路: 数位DP. 极端情况下,每一位都是9,所以各位数字之和不超过9*18.(为了方便这里用了9*19) f[i][j] ...

  8. 【题解】AHOI2009同类分布

    好开心呀~果然只有不看题解做出来的题目才会真正的有一种骄傲与满足吧ヾ(๑╹◡╹)ノ" 实际上这题只要顺藤摸瓜就可以了.首先按照数位dp的套路,有两维想必是省不掉:1.当前dp到到的位数:2. ...

  9. [luogu4127 AHOI2009] 同类分布 (数位dp)

    传送门 Solution 裸数位dp,空间存不下只能枚举数字具体是什么 注意memset最好为-1,不要是0,有很多状态答案为0 Code //By Menteur_Hxy #include < ...

随机推荐

  1. 13.SpringMVC核心技术-异常处理

    常用的SpringMVC异常处理方式主要是三种: 1.使用系统定义好的异常处理器   SimpleMappingExceptionResolver 2.使用自定义异常处理器 3.使用异常处理注解 Si ...

  2. python多继承下的查找顺序-MRO原则演变与C3算法

    在python历史版本中的演变史 python2.2之前: MRO原则: 只有经典类,遵循深度优先(从左到右)原则, 存在的问题:在有重叠的多继承中,违背重写可用原则 解决办法是再设计类的时候不要设计 ...

  3. PAT Advanced 1155 Heap Paths (30 分)

    In computer science, a heap is a specialized tree-based data structure that satisfies the heap prope ...

  4. Python---virtualenv + Tensorflow + 安装jupyter notebook

    一.ubuntu系统下安装完caffe后,安装 jupyter notebook. 在终端中执行,安装指令: sudo pip install jupyter 安装完成后运行 notebook : j ...

  5. 关于C++ Builder Codegurad 问题的排查。

    关于C++ BUILDER6 我目前不知道有什么特别好的内存排查工具.尤其为了对付memory leak, (Eurekalog 这个工具内存泄漏主要针对delphi,BCB配置比较繁琐). 除了BC ...

  6. centos wireshark

    root安装: yum install wireshark yum install wireshark-gnome wireshark error: There are no interfaces o ...

  7. JS 字符串转字节截取

    /* * param str 要截取的字符串 * param L 要截取的字节长度,注意是字节不是字符,一个汉字两个字节 * return 截取后的字符串 */ function CutStr(str ...

  8. SparkStreaming使用checkpoint存在的问题及解决方案

    sparkstreaming关于偏移量的管理 在 Direct DStream初始化的时候,需要指定一个包含每个topic的每个分区的offset用于让Direct DStream从指定位置读取数据. ...

  9. location - URL

    1.hash:获取或设置href 属性中跟在数字符号 # 之后的内容 2.跳转页面: 1)location.href 2)location.replace() 3)location.reload(tr ...

  10. lite-monitor 一款基于shell命令的监控系统

    介绍 lite-monitor 一款基于shell命令的监控系统,可以根据项目中输出的日志定时输出或者统计输出,并发送钉钉机器人报警消息. lite-monitor能做什么: 定时监控某个服务进程是否 ...