91分 wa on 8求调
void solve() {
string s;
cin >> s;
int m = read(), n = s.size();
vector<vector<int>> g(n + 22, vector<int>(n + 22));
for(int i = 0; i < n; i++) {
for(int j = i; j < min(n, i + 18); j++) {
string t = s.substr(i, j - i + 1);
g[i + 1][j + 1] = stol(t);
}
}
vector<vector<int>> dp(n + 2, vector<int>(m + 2, inf));
dp[0][0] = -1;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
for(int k = i; k >= max(1LL, i - 18); k--) {
int now = g[k][i];
if(j < now) break;
dp[i][j] = min(dp[i][j], dp[k - 1][j - now] + 1);
}
}
}
int ans = dp[n][m];
if(ans > inf / 2) ans = -1;
cout << ans << endl;
}