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# (.NET Core 3.1.201) (judge verdict: Accepted)

using System;
using System.Collections.Generic;
using System.Linq;
using static System.Console;
using static System.Math;

class MainClass
{
    static void Main()
    {
        string S = ReadLine();
        int K = int.Parse(ReadLine());

        int N = S.Length;
        var dp = new long[N + 1, K + 1, 2];
        dp[0, 0, 0] = 1;

        for (int i = 0; i < N; i++)
        {
            int n = S[i] - '0';
            for (int j = 0; j < K+1; j++)
            {
                for (int k = 0; k < 2; k++)
                {
                    var v = dp[i, j, k];
                    for (int l = 0; l < 10; l++)
                    {
                        int nk = k;
                        if (k == 0)
                        {
                            if (l < n) nk = 1;
                            else if (l == n) nk = 0;
                            else break;
                        }
                        int nj = j;
                        if (l > 0) nj++;
                        if (nj > K) break;
                        dp[i + 1, nj, nk] += v;
                    }
                }
            }
        }
        long ans = 0;

            ans += dp[N, K, 0] + dp[N, K, 1];
        
        WriteLine(ans);
    }
}