HDU_4734_数位dp

Posted 冷暖知不知

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU_4734_数位dp相关的知识,希望对你有一定的参考价值。

http://acm.hdu.edu.cn/showproblem.php?pid=4734

 

模版题。

 

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

int dp[20000][15],a,b,num[15];

int dfs(int sum,int pos,int limit)
{
    if(pos == 0)    return sum >= 0;
    if(sum < 0)     return 0;
    if(!limit && dp[sum][pos] != -1)    return dp[sum][pos];
    int ans = 0,endd = limit?num[pos]:9;
    for(int i = 0;i <= endd;i++)
    {
        ans += dfs(sum-i*(1<<(pos-1)),pos-1,limit && i == endd);
    }
    if(!limit)  dp[sum][pos] = ans;
    return ans;
}
int main()
{
    memset(dp,-1,sizeof(dp));
    int T;
    scanf("%d",&T);
    for(int i = 1;i <= T;i++)
    {
        scanf("%d%d",&a,&b);
        int sum = 0,now = 1;
        while(a)
        {
            sum += a%10*now;
            now *= 2;
            a /= 10;
        }
        now = 1;
        while(b)
        {
            num[now] = b%10;
            now++;
            b /= 10;
        }
        printf("Case #%d: %d\n",i,dfs(sum,now-1,1));
    }
    return 0;
}

 

以上是关于HDU_4734_数位dp的主要内容,如果未能解决你的问题,请参考以下文章

HDU 4734 F(x) (数位DP)

HDU4734(数位dp)

hdu 4734 数位dp

HDU - 4734 - F(x) (数位DP)

hdu 4734 数位DP

hdu4734 数位dp + 小技巧