到处都是0
解题思路数位DP板子改改
代码#includeusing namespace std; const int N = 1e2 + 5; char s[N]; long long dp[N][5]; int n; long long dfs(int pos, int lim, int k) { if (k < 0) return 0; if (pos > n) return k == 0; long long sum = 0; if (!lim && dp[pos][k]) return dp[pos][k]; for (int i = 0; i <= (lim ? s[pos] : 9); i++) sum += dfs(pos + 1, lim && i == s[pos], k - (i ? 1 : 0)); if (!lim) dp[pos][k] = sum; return sum; } void solve() { cin >> (s + 1); n = strlen(s + 1); int k; cin >> k; for (int i = 1; i <= n; i++) s[i] -= '0'; cout << dfs(1, 1, k); } int main() { solve(); return 0; }



