1class Solution {2public:3int dp[101][101];4int dfs(string &s, int left, int K) {5int k = K;6if (s.size() - left <= k) return 0;7if (dp[left][k] >= 0) return dp[left][k];8int res = k ? dfs(s, left + 1, k - 1) : 10000, c = 1;9for (int i = left + 1; i <= s.size(); ++i) {10res = min(res, dfs(s, i, k) + 1 + (c >= 100 ? 3 : (c >= 10 ? 2 : (c > 1 ? 1 : 0))));11if (i == s.size()) break;12if (s[i] == s[left])13++c;14else if (--k < 0)15break;16}17return dp[left][K] = res;18}1920int getLengthOfOptimalCompression(string s, int k) {21memset(dp, -1, sizeof(dp));22return dfs(s, 0, k);23}24};