zoukankan      html  css  js  c++  java
  • hdu 4734 数位dp

    /*
    数位dp,记忆化搜索写法
    注意memset(dp,-1,sizeof(dp))是放在外面的,这样保证每次搜索时存的值满足下一次也能够用;
    假设放在里面就会超时
    每一个长度有10000种状态
    */
    #include<stdio.h>
    #include<string.h>
    #define N  20
    int len,digit[N],dp[N][10000];
    int dfs(int len,int cnt,int ok) {
          if(cnt<0)return 0;
           if(!len)return 1;
        if(!ok&&dp[len][cnt]!=-1)
            return dp[len][cnt];
         int ans=0,i,maxx=ok?

    digit[len]:9; for(i=0;i<=maxx;i++) ans+=dfs(len-1,cnt-i*(1<<(len-1)),ok&&i==maxx);// if(!ok)//仅仅有当不是边界时才干够存储 dp[len][cnt]=ans;//长度为len时小于等于cnt的值 return ans; } int f(int n,int kk) { int len=0; while(n) { digit[++len]=n%10; n/=10; } return dfs(len,kk,1); } int main() { int t,n,m,k=0,z,kk; scanf("%d",&t); memset(dp,-1,sizeof(dp)); while(t--) { scanf("%d%d",&n,&m); kk=0;z=1; while(n) { kk+=n%10*z; z*=2; n/=10; } printf("Case #%d: %d ",++k,f(m,kk)); } return 0;}


  • 相关阅读:
    gil
    异步
    字符串 最长回文字串
    字符串 最长公共前缀
    数组 合并区间
    python 排序
    2021.9.3 阿里笔试AK贴
    SIP协议详解
    fiddler抓包各字段的含义
    常见的HTTP状态码列表
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6733536.html
Copyright © 2011-2022 走看看