标签:
Description
Input
Output
Sample Input
Sample Output
#include <cstdio> #include <iostream> #include <cstring> #include <string> using namespace std; int b[10], num[10]; int dp[10][4605]; int dfs(int u, int f, bool limit) { if(u < 1) return 1; if(!limit && dp[u][f] != -1) return dp[u][f]; int maxn = limit ? b[u] : 9; int ret = 0, cur; for(int i=0; i<=maxn; i++) { cur = f - i*(1<<u-1); if(cur > 0) { ret += dfs(u-1, cur, limit && i==maxn); } else if(cur == 0) { ret += 1; } } if(!limit) dp[u][f] = ret; return ret; } int f(int n, int a) { int lenb=0; memset(b, 0, sizeof(b)); while(n) { b[++lenb] = n%10; n /= 10; } return dfs(lenb, a, 1); } int main () { num[0] = 1; for(int i=1; i<10; i++) { num[i] = num[i-1] * 10; } int T, A, B; scanf("%d", &T); memset(dp, -1, sizeof(dp)); for(int kase=1; kase<=T; kase++) { scanf("%d%d", &A, &B); int base = 1, F=0; while(A) { F += base * (A % 10); base <<= 1; A /= 10; } printf("Case #%d: %d\n", kase, f(B, F)); } return 0; }
标签:
原文地址:http://www.cnblogs.com/AcIsFun/p/5389187.html