hdu4734

来源:互联网 发布:小米电视 直播软件 编辑:程序博客网 时间:2024/06/14 20:48
int dp[20][10005];int digit[20];int getvalue(int a){    int i=0;    int ans=0;    while(a){        ans=ans+((a%10)*(1<<i));        i++;        a/=10;    }    return ans;}int dfs(int pos,int state,int limit){    if(state<0)return 0;    if(pos==0)return state>=0;    int ans=0;    int up=limit?digit[pos]:9;    for(int i=0;i<=up;i++){        ans+=dfs(pos-1,state-i*(1<<(pos-1)),limit&&i==digit[pos]);    }    if(!limit)dp[pos][state]=ans;    return ans;}int solve(int b,int a){    int pos=0;    while(b){        digit[pos++]=b%10;         b/=10;    }    return dfs(pos,getvalue(a),1);}int main(){    int t;    cin>>t;    while(t--){        memset(dp,-1,sizeof(dp));        cin>>a>>b;        cout<<solve(b,a);    }    return 0;}