Problem:
Score : 500 points

Problem Statement

Find the number of integers between 1 and N (inclusive) that contains exactly K non-zero digits when written in base ten.

Constraints

1 \leq N < 10^{100}

1 \leq K \leq 3

Input

Input is given from Standard Input in the following format:

N
K

Output

Print the count.

Sample Input 1

100
1

Sample Output 1

19

The following 19 integers satisfy the condition:

1,2,3,4,5,6,7,8,9,10,20,30,40,50,60,70,80,90,100

Sample Input 2

25
2

Sample Output 2

14

The following 14 integers satisfy the condition:

11,12,13,14,15,16,17,18,19,21,22,23,24,25

Sample Input 3

314159
2

Sample Output 3

937

Sample Input 4

9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
3

Sample Output 4

117879300

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef pair<ll,ll> mp;
ll inf =  1e9;


int main(){
    string s;
    cin>>s;
    ll k;
    cin>>k;
    ll n = s.size();
    vector<vector<vector<ll> > > dp(n,vector<vector<ll> >(k+1,vector<ll>(2,0) ) );
    for(int i=1;i<n;i++)dp[i][1][0]=9;
    dp[0][1][0] = (s[0]-'0')-1;
    dp[0][1][1] = 1;
    for(int i=1;i<n;i++){
	if( s[i] =='0' ){
	    for(int j=1;j<=k;j++){
		dp[i][j][1] +=dp[i-1][j][1];
	    }
	    for(int j=1;j<=k;j++){
		dp[i][j][0] += dp[i][j-1][0]*9 + dp[i-1][j][0];
	    }
	}else{
	    for(int j=1;j<=k;j++){
		dp[i][j][1] +=dp[i-1][j-1][1];
	    }
	    for(int j=1;j<=k;j++){
		dp[i][j][0] += dp[i-1][j-1][0]*9 + dp[i-1][j][0] + dp[i-1][j-1][1]* ((s[i]-'0')-1) + dp[i-1][j][1];
	    }
	}
    }
    ll res = 0;
  //  cout<<dp[n-1][k][0]<<' '<<dp[n-1][k][1]<<endl;
    //for(ll i=0;i<=k;i++)
	res += dp[n-1][k][0] + dp[n-1][k][1];
    cout<<res<<endl;
    return 0;
}