zoukankan      html  css  js  c++  java
  • 【数位DP】 HDU 4734 F(x)

    原题直通车: HDU 4734 F(x)

    题意:F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1, 求0.....B中F[x]<=F[A]的个数。

    代码:

    // 31MS	548K	931 B	G++
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int digit[11], dp[11][6000], m;
    inline int set_m(int x) {
        int k=1; m=0;
        while(x>0) m+=(x%10)*k, x/=10, k*=2;
    }
    inline int dfs(int pos, int rt, bool limit) {
        if(!pos) return (rt>=0);
        if(!limit&&dp[pos][rt]!=-1) return dp[pos][rt];
        int len=(limit?digit[pos]:9);
        int ret=0;
        for(int i=0; i<=len; ++i) {
            int a=rt-i*(1<<(pos-1));
            if(a<0) break;
            ret+=dfs(pos-1, a, limit&&i==len);
        }
        if(!limit) dp[pos][rt]=ret;
        return ret;
    }
    inline int work(int x) {
        int len=0;
        while(x) digit[++len]=x%10, x/=10;
        return dfs(len, m, true);
    }
    int main() {
        int T, cas=1; scanf("%d",&T);
        memset(dp, -1, sizeof(dp));
        while(T--) {
            int x, r; scanf("%d%d",&x, &r);
            set_m(x);
            printf("Case #%d: %d
    ", cas++, work(r));
        }
        return 0;
    }
    


  • 相关阅读:
    语言基础
    进制转换
    添加
    查找
    继承
    封装
    面向基础 c#小复习
    主外键
    三个表的关系
    插入信息,模糊查询,聚合函数,时间函数,排序,字符串函数,数学函数,求个数,球最大
  • 原文地址:https://www.cnblogs.com/james1207/p/3331380.html
Copyright © 2011-2022 走看看