zoukankan      html  css  js  c++  java
  • $BZOJ1799 Luogu4127$ 月之谜 数位统计$DP$

    AcWing

    Description


    Sol

    看了很久也没有完全理解直接$DP$的做法,然后发现了记搜的做法,觉得好棒!

    这里是超棒的数位$DP$的记搜做法总结   看完仿佛就觉得自己入门了,但是就像文中写的,还是要多做题才能真正弄明白鸭,还要加油(ง •_•)ง

    然后这里是同一个人的本题题解

    Code

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #define il inline
     5 #define Rg register
     6 #define go(i,a,b) for(i=a;i<=b;i++)
     7 #define yes(i,a,b) for(i=a;i>=b;i++)
     8 #define ll long long
     9 #define mem(a,b) memset(a,-1,sizeof(a));
    10 using namespace std;
    11 il ll read()
    12 {
    13     ll x=0,y=1;char c=getchar();
    14     while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
    15     while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
    16     return x*y;
    17 }
    18 int len,a[20];
    19 ll l,r,mod,f[20][200][200];
    20 il ll dfs(int pos,int sum,int ys,int limit)
    21 {
    22     if(pos>len)return (ys==0 && sum==mod);
    23     if(!limit && f[pos][sum][ys]!=-1)return f[pos][sum][ys];
    24     ll as=0;int maxs=limit?a[len-pos+1]:9,i;
    25     go(i,0,maxs)as+=dfs(pos+1,sum+i,(1LL*ys*10+i)%mod,i==maxs&&limit);
    26     if(!limit)f[pos][sum][ys]=as;return as;
    27 }
    28 il ll sol(ll x)
    29 {
    30     len=0;
    31     while(x)a[++len]=x%10,x/=10;
    32     ll as=0;
    33     go(mod,1,9*len){mem(f,0);as+=dfs(1,0,0,1);}
    34     return as;
    35 }
    36 int main()
    37 {
    38     l=read(),r=read();
    39     printf("%lld
    ",sol(r)-sol(l-1));
    40     return 0;
    41 }
    View Code

     

    光伴随的阴影
  • 相关阅读:
    Map
    input输入框文字提示IE兼容
    Linux下实现获取远程机器文件
    ssl_error_rx_record_too_long
    Linux下访问网站
    Linux安装Jdk1.7
    bootstrap左右圆角按钮-适配手机页面
    jQuery使用load方法加载其他文档内容
    Js操作DOM小练习_01
    BootstrapValidator验证表单用法
  • 原文地址:https://www.cnblogs.com/forward777/p/11256547.html
Copyright © 2011-2022 走看看