hdu3709 Balanced Number

Posted robin20050901

tags:

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

题目链接

题目大意:找出区间内平衡数的个数

平衡数的定义:如果一个数可以以一个数位为中心,两边的权值符合杠杆原理

例如:4139 以3为中心,4*2+1*1=9*1

枚举支点算答案

用f[len][k][t]表示长度为len,支点为k,力矩为t

代码:

//记得开long long哦 
#include<bits/stdc++.h>

#define int long long

using namespace std;

int T;
int a[20];
int f[20][20][2005];

int dfs(int len,int k,int t,bool f2)
{
    if(!len)return !t;
    if(t<0)return 0;
    if(!f2&&f[len][k][t]!=-1)return f[len][k][t];
    int maxn=f2?a[len]:9,ans=0;
    for(int i=0;i<=maxn;i++)ans+=dfs(len-1,k,t+i*(len-k),f2&&i==maxn);
    if(!f2)f[len][k][t]=ans;
    return ans;
}

int solve(int x)
{
    int len=0,ans=0;
    while(x)a[++len]=x%10,x/=10;
    for(int i=1;i<=len;i++)ans+=dfs(len,i,0,1);
    return ans-len+1;
} 

main()
{
    scanf("%lld",&T);
    while(T--)
    {
        int l,r;
        scanf("%lld%lld",&l,&r);
        memset(f,-1,sizeof(f));
        printf("%lld
",solve(r)-solve(l-1)); 
    }
    
    return 0;
}

 

以上是关于hdu3709 Balanced Number的主要内容,如果未能解决你的问题,请参考以下文章

HDU - 3709 - Balanced Number(数位DP)

HDU 3709 Balanced Number (数位DP)

hdu3709 Balanced Number

HDU3709平衡数Balanced Number

HDU 3709 Balanced Number (数位DP)

HDU 3709 Balanced Number