zoukankan      html  css  js  c++  java
  • HDU 4734

    数位dp题;也是我做的第一个数位dp的题目;

    感觉数位dp的模板性很强啊,思想都差不太多!

    有几个写的很好的参考资料:

    推荐一下:

    数位计数问题解法研究

    浅谈数位类统计问题

    我的代码:

     1 #include<cstdio>
     2 #include<cstring>
     3 #define maxn 16
     4 #define ll long long
     5 using namespace std;
     6 
     7 int dp[maxn][5000];
     8 int d[maxn],sum;
     9 
    10 ll dfs(int w,int he,bool flag)
    11 {
    12     if(he<0)return 0;
    13     if(!w)return 1;
    14     if(!flag&&dp[w][he]!=-1) return dp[w][he];
    15     int ff=flag?d[w]:9;
    16     ll ret=0;
    17     for(int i=0; i<=ff; i++)
    18         ret+=dfs(w-1,he-i*(1<<(w-1)),flag&&i==ff);
    19     if(!flag)dp[w][he]=ret;
    20     return ret;
    21 }
    22 
    23 ll calc(ll b)
    24 {
    25     memset(d,0,sizeof d);
    26     int n=0;
    27     while(b)
    28     {
    29         d[++n]=b%10;
    30         b/=10;
    31     }
    32     return dfs(n,sum,true);
    33 }
    34 
    35 int getsum(ll a)
    36 {
    37     int s=0,ji=1;
    38     while(a)
    39     {
    40         s+=((a%10)*ji);
    41         a/=10;
    42         ji<<=1;
    43     }
    44     return s;
    45 }
    46 
    47 int main()
    48 {
    49     int t,ca=1;
    50     long long a,b;
    51     scanf("%d",&t);
    52     memset(dp,-1,sizeof dp);
    53     while(t--)
    54     {
    55         scanf("%I64d%I64d",&a,&b);
    56         sum=getsum(a);
    57         printf("Case #%d: %I64d
    ",ca++,calc(b));
    58     }
    59     return 0;
    60 }
    View Code
  • 相关阅读:
    OCP-1Z0-052-V8.02-28题
    OCP-1Z0-052-V8.02-27题
    OCP-1Z0-052-V8.02-26题
    OCP-1Z0-052-V8.02-25题
    Oracle DB 管理还原数据
    Flex中常见的图
    OCP-1Z0-052-V8.02-23题
    OCP-1Z0-052-V8.02-21题
    OCP-1Z0-052-V8.02-20题
    OCP-1Z0-052-V8.02-19题
  • 原文地址:https://www.cnblogs.com/yours1103/p/3324143.html
Copyright © 2011-2022 走看看