HDU 4389——X mod f(x)(数位DP)

Posted phlsheji

tags:

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

X mod f(x)

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Problem Description

Here is a function f(x):
   int f ( int x ) {
       if ( x == 0 ) return 0;
       return f ( x / 10 ) + x % 10;
   }


   Now, you want to know, in a given interval [A, B] (1 <= A <= B <= 109), how many integer x that mod f(x) equal to 0.

Input

   The first line has an integer T (1 <= T <= 50), indicate the number of test cases.
   Each test case has two integers A, B.

Output

   For each test case, output only one line containing the case number and an integer indicated the number of x.

Sample Input

21 10

11 20

 

Sample Output

Case 1: 10

Case 2: 3

————————————————————————切割线—————————————————————

记忆化搜索:

数据范围是10的9次方。数位和最大为9*9=81,枚举数位和

每次要维护:pos维数,当前数位和a。枚举的数位和b。当前的模mo。有无上限e

dp [pos] [a] [b] [mo];


#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<queue>
#include<deque>
#include<stack>
#include<map>
#include<set>
#include<cmath>
#include<cstdlib>
#include<cctype>
#define inf 0x3f3f3f3f
#define maxn 10000
typedef long long LL;
using namespace std;
int dp[11][82][82][82];
int num[11],pos,n,m;
int dfs(int pos,int a,int b,int mo,int e)
{
    if(pos==-1) return a==b&&!mo;
    if(!e&&dp[pos][a][b][mo]!=-1) return dp[pos][a][b][mo];
    int end=e?num[pos]:9;
    int sum=0;
    for(int i=0;i<=end;i++){
        sum+=dfs(pos-1,a+i,b,(mo*10+i)%b,e&&i==end);
    }
    return e?sum:dp[pos][a][b][mo]=sum;
}
void Init(int x)
{
    pos=0;
    while(x){
        num[pos++]=x%10;
        x/=10;
    }
}
int cal(int x)
{
    Init(x);
    int res=0;
    for(int i=1;i<=81;i++){
        res+=dfs(pos-1,0,i,0,1);
    }
    return res;
}
int main()
{
    int t,iCase=1;
    memset(dp,-1,sizeof dp);
    cin>>t;
    while(t--){
        scanf("%d%d",&m,&n);
        printf("Case %d: %d\n",iCase++,cal(n)-cal(m-1));
    }

	return 0;
}



 

以上是关于HDU 4389——X mod f(x)(数位DP)的主要内容,如果未能解决你的问题,请参考以下文章

hdu 4389 X mod f(x) 数位dp

HDU-4389 X mod f(x) && 2018上海大都会邀请赛J 数位dp

hdu4389 Xmod f(x) 数位DP

HDU X mod f(x) (数位DP)

HDU 4389 数位dp

hdu 4734 F(x) 数位DP