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)