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

[HDU 3709] Balanced Number

时间:2016-05-13 08:50:40      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

对于4139,支点为3,(4-2)*4+(3-2)*1+(2-2)*3+(1-2)*9=0

dp[dep][sum][zzz]表示长度为dep,之前的权值为sum,支点为zzz的平衡数的个数

枚举支点求值

注意0的情况

技术分享
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 ll dp[20][2000][20];
 5 int dig[20];
 6 ll dfs(int dep,int sum,int zzz,int flag){
 7     if(!dep)return !sum;
 8     if(sum<0)return 0;
 9     if(!flag&&dp[dep][sum][zzz]!=-1)return dp[dep][sum][zzz];
10     int lim=flag?dig[dep]:9;
11     ll ans=0;
12     for(int i=0;i<=lim;i++)
13         ans+=dfs(dep-1,sum+(dep-zzz)*i,zzz,flag&(i==lim));
14     if(!flag)dp[dep][sum][zzz]=ans;
15     return ans;
16 }
17 ll solve(ll x){
18     int dd=0;
19     while(x)dig[++dd]=x%10,x/=10;
20     ll ans=0;
21     for(int i=dd;i;i--)ans+=dfs(dd,0,i,1);
22     return ans-dd+1;//0满足所有,但只算一次
23 }
24 int main(){
25     memset(dp,-1,sizeof(dp));
26     int T;
27     scanf("%d",&T);
28     while(T--){
29         ll A,B;
30         scanf("%lld%lld",&A,&B);
31         printf("%lld\n",solve(B)-solve(A-1));
32     }
33     return 0;
34 }
View Code

 

[HDU 3709] Balanced Number

标签:

原文地址:http://www.cnblogs.com/Ngshily/p/5485525.html

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