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

hdu3709 Balanced Number

时间:2019-03-18 13:31:21      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:balance   false   原理   set   open   ros   title   表示   turn   

题目链接

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

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

例如: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\n",solve(r)-solve(l-1)); 
    }
    
    return 0;
}

 

hdu3709 Balanced Number

标签:balance   false   原理   set   open   ros   title   表示   turn   

原文地址:https://www.cnblogs.com/Robin20050901/p/10551412.html

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