C++| DP | Memoization
```\n\tvector> dp;\n    int func(int i,string& s,int car,int len){\n        if(i>=s.size()) return 0;\n        if(dp[i][car]!=-1) return dp[i][car];\n        if
```\n\tvector<vector<int>> dp;\n    int func(int i,string& s,int car,int len){\n        if(i>=s.size()) return 0;\n        if(dp[i][car]!=-1) return dp[i][car];\n        if(s[i]==\'0\') return dp[i][car]=func(i+1,s,car,len);\n        else{ \n            int ans=INT_MAX;\n            ans=1+func(i+1,s,car,len);\n            if(car>0) ans=min(ans,func(i+len,s,car-1,len));\n            return dp[i][car]=ans;\n        }\n    }\n    int minimumWhiteTiles(string s, int car, int len) {\n        dp=vector<vector<int>>(s.size(),vector<int>(car+1,-1));\n        return func(0,s,car,len);\n    }
['Memoization', 'C']