self 同类分布

HYSBZ - 1799

给出a,b,求出[a,b]中各位数字之和能整除原数的数的个数。Sample Input

10 19

Sample Output

3

Hint

【约束条件】1 ≤ a ≤ b ≤ 10^18

约束:一个数是它自己数位和的倍数,直接dp根本找不到状态,枚举数位和,因为总就162,然后问题就变成了一个数%mod=0,mod是枚举的,想想状态:dp[pos][sum][val],当前pos位上数位和是sum,val就是在算这个数%mod,(从高位算  *10+i),因为我们枚举的数要保证数位和等于mod,还要保证这个数是mod的倍数,很自然就能找到这些状态,显然对于每一个mod,val不能保证状态唯一,这是你要是想加一维dp[pos][sum][val][mod],记录每一个mod的状态(这里sum可以用减法,然而val不行,就只能加一维),那你就想太多了,这样是会超时的(因为状态太多,记忆化效果不好)。这里直接对每一个mod,memset一次就能ac。下面的代码还把limit的当做了状态,因为每次都要初始化,所以能这样,memset在多组外面是不能这样的,不过奇葩的,这代码,如果不把limit当状态,还是在!limit 条件下记录dp,提交一发,时间竟然更短了,可能是每次memset的关系!!!

                                                        ——引自wust_wenhao

#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
const int N=+,M=+;
ll a[N],dp[N][M][M][];
ll dfs(int pos,int sum,int val,int mod,bool limit){
if(sum-*pos>) return ;
//最坏的情况,这一位及后面的全部为9都不能达到0那就直接GG,这个剪枝不会影响ac
if(!pos) return !sum && !val;
if(dp[pos][sum][val][limit]!=-) return dp[pos][sum][val][limit];
int up=limit?a[pos]:;
ll ans=;
for(int i=;i<=up;i++){
if(sum-i<) break;
ans+=dfs(pos-,sum-i,(val*+i)%mod,mod,limit && i==a[pos]);
}
return dp[pos][sum][val][limit]=ans;
}
ll solve(ll x){
int pos=;ll ans=;
for(;x;x/=) a[++pos]=x%;
for(int i=;i<=pos*;i++){//上限就是每一位都是9
memset(dp,-,sizeof dp);
ans+=dfs(pos,i,,i,true);
}
return ans;
}
int main(){
for(ll a,b;~scanf("%lld%lld",&a,&b);){
printf("%lld\n",solve(b)-solve(a-));
}
return ;
}

HYSBZ - 1799 self 同类分布的更多相关文章

  1. [BZOJ 1799] self 同类分布

    Link: BZOJ 1799 传送门 Solution: 一句话的题目,看得爽,做得烦 一般这类和数位相关的都是数位$dp$吧 不过一开始还是感觉不太可做,毕竟每个数模数不同 但要发现,模数最高也只 ...

  2. bzoj 1799: [Ahoi2009]self 同类分布 数位dp

    1799: [Ahoi2009]self 同类分布 Time Limit: 50 Sec  Memory Limit: 64 MB[Submit][Status][Discuss] Descripti ...

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

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

  4. [Ahoi2009]self 同类分布

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

  5. BZOJ1799 self 同类分布 数位dp

    BZOJ1799self 同类分布 去博客园看该题解 题意 给出a,b,求出[a,b]中各位数字之和能整除原数的数的个数. [约束条件]1 ≤ a ≤ b ≤ 10^18 题解 1.所有的位数之和&l ...

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

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

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

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

  8. P4127 [AHOI2009]同类分布

    P4127 [AHOI2009]同类分布 题解 好的,敲上数位DP  DFS板子 记录一下填的各位数字之和 sum ,然后记录一下原数 yuan 最后判断一下  yuan%sum==0 不就好啦??? ...

  9. BZOJ 1799 同类分布

    一开始没想出来..一看题解 我艹直接枚举数位的和啊.....怪不得给50s. 还是太蠢. #include<iostream> #include<cstdio> #includ ...

随机推荐

  1. git只拉取github部分代码的方法

    需求:github某个项目所有代码太大,有600+M,甚至更大:只需要拉取部分代码,一是可以降低网络消耗,二是可以降低磁盘占用 分析了下空间占用情况:发现每个项目下的.git/objects/pack ...

  2. squid 访问日志记录

    squid日志记录在squid.conf 也可记录.并且squid日志可以不记录静态项 在squid.conf 加入 (1)access_log /var/log/squid/access.log  ...

  3. 9.11排序与查找(一)——给定两个排序后的数组A和B,当中A的末端有足够的缓冲空间容纳B。将B合并入A并排序

    /**  * 功能:给定两个排序后的数组A和B,当中A的末端有足够的缓冲空间容纳B.将B合并入A并排序. */ /** * 问题:假设将元素插入数组A的前端,就必须将原有的元素向后移动,以腾出空间. ...

  4. Fragment生命周期和Activity生命周期的关系

    Fragment生命周期: 重点回调函数: 1. onAttach()当碎片和活动建立关联的时候调用.2. onCreateView()为碎片创建视图(加载布局)时调用.3. onActivityCr ...

  5. JVM源码分析之FinalReference完全解读

    Java对象引用体系除了强引用之外,出于对性能.可扩展性等方面考虑还特地实现了4种其他引用:SoftReference.WeakReference.PhantomReference.FinalRefe ...

  6. 【Excle数据透视】如何隐藏数据透视表字段的分类汇总

    如下图:是显示数据透视表的分类汇总 那么我们现在想弄成以下这样,不显示分类汇总 如何操作呢? 步骤 单击数据透视表任意单元格→数据透视表工具→设计→分类汇总→不显示分类汇总 ***显示分类汇总*** ...

  7. App功能测试的7大注意点

    转载于:https://mp.weixin.qq.com/s/27DZ1EQVpl-gb4S7n-He4g 01 运行 1)App安装完成后的试运行,可正常打开软件. 2)App打开测试,是否有加载状 ...

  8. linux 内存分析

    http://blog.yufeng.info/archives/2456  这篇文章不错 值得看 http://www.361way.com/memory-analysis/5018.html

  9. IDC机房带宽突然暴涨问题!

    IDC机房带宽突然暴涨问题! 1[提出问题] [实际案例一] 凌晨3:00点某公司(网站业务)的一个IDC机房带宽流量突然从平时高峰期150M猛增至1000M,如下图: 该故障的影响:直接导致数百台服 ...

  10. URL重写:Rewirte模块原理详解

    Apache+PHP+MySQL Rewirte主要的功能就是实现URL的跳转和隐藏真实地址,基于Perl语言的正则表达式规范.平时帮助我们实现拟静态,拟目录,域名跳转,防止盗链等.本文将针对mod_ ...