标签:
Time Limit: 1000/500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2190 Accepted Submission(s): 828
1 #include<cstdio> 2 #include<algorithm> 3 #include<iostream> 4 #include<cmath> 5 #include<cstring> 6 #define ll long long 7 8 using namespace std; 9 10 int n; 11 int p[12]; 12 int a,b; 13 int fa,fb; 14 int num[12]; 15 int dp[12][25010]; 16 17 void init() { 18 p[0]=1; 19 for(int i=1; i<=10; i++) 20 p[i]=p[i-1]*2; 21 } 22 23 int dfs(int i,int s,bool e) { 24 if(i==-1)return s>=0; 25 if(s<0)return 0; 26 if(!e&&dp[i][s]!=-1)return dp[i][s]; 27 int u=e?num[i]:9; 28 int res=0; 29 for(int d=0; d<=u; d++) { 30 int news=s-d*p[i]; 31 res+=dfs(i-1,news,e&&d==u); 32 } 33 return e?res:dp[i][s]=res; 34 } 35 36 int solve(int x) { 37 int len=0; 38 while(x) { 39 num[len++]=x%10; 40 x/=10; 41 } 42 return dfs(len-1,fa,1); 43 } 44 45 int main() { 46 //freopen("in.txt","r",stdin); 47 memset(dp,-1,sizeof dp); 48 init(); 49 int t; 50 int ca=1; 51 cin>>t; 52 while(t--) { 53 scanf("%d%d",&a,&b); 54 int k=0; 55 fa=0; 56 while(a) { 57 fa+=p[k]*(a%10); 58 a/=10,k++; 59 } 60 //cout<<"fa="<<fa<<endl; 61 printf("Case #%d: %d\n",ca++,solve(b)); 62 } 63 return 0; 64 }
标签:
原文地址:http://www.cnblogs.com/White-Bread/p/4461833.html