码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 4734 F(x)

时间:2014-06-23 08:14:28      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   http   tar   get   

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4734

题意:对于一个n位的十进制数字x=(AnAn-1An-2 ... A2A1),定义 F(x)=An*2n-1+An-1*2n-2+ ...+A2*2+A1*1。给出A、B,求在[0,B]之间有多少数字满足F(x)<=F(A)?

思路:数位DP。f[dep][x]表示到达dep剩余为x的方案数。

 

i64 n,m;
i64 f[25][N];
int a[25],num;


i64 Sum;


i64 DFS(int dep,int flag,int cur)
{
    if(cur<0) return 0;
    if(dep==-1) return 1;
    if(!flag&&f[dep][cur]!=-1) return f[dep][cur];
    int M=flag?a[dep]:9;
    i64 ans=0,i;
    for(i=0;i<=M;i++)
    {
        ans+=DFS(dep-1,flag&&i==M,cur-i*(1<<dep));
    }
    if(!flag) f[dep][cur]=ans;
    return ans;
}


i64 cal()
{
    num=0;
    while(n) a[num++]=n%10,n/=10;
    Sum=0;
    int i,j;
    FOR0(i,num) Sum+=a[i]*(1<<i);
    num=0;
    while(m) a[num++]=m%10,m/=10;
    return DFS(num-1,1,Sum);
}


int main()
{
    clr(f,-1);
    int num=0;
    rush()
    {
        scanf("%I64d%I64d",&n,&m);
        printf("Case #%d: %I64d\n",++num,cal());
    }
}

 

 

 

HDU 4734 F(x),布布扣,bubuko.com

HDU 4734 F(x)

标签:style   class   blog   http   tar   get   

原文地址:http://www.cnblogs.com/jianglangcaijin/p/3799469.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!