|
| 1 | +class Solution { |
| 2 | +public: |
| 3 | + int rec(int ind,int m,int n,vector<string>&strs,vector<vector<vector<int>>>&dp){ |
| 4 | + if(ind==0){ |
| 5 | + int ones = count(strs[0].begin(),strs[0].end(),'1'); |
| 6 | + int zeroes = strs[0].size()-ones; |
| 7 | + return ones<=n && zeroes<=m; |
| 8 | + } |
| 9 | + if(m<0 || n<0) return 0; |
| 10 | + if(dp[ind][m][n]!=-1) return dp[ind][m][n]; |
| 11 | + int not_pick = rec(ind-1,m,n,strs,dp); |
| 12 | + int pick = 0; |
| 13 | + int ones = count(strs[ind].begin(),strs[ind].end(),'1'); |
| 14 | + int zeroes = strs[ind].size()-ones; |
| 15 | + if(ones<=n && zeroes<=m){ |
| 16 | + pick = 1+rec(ind-1,m-zeroes,n-ones,strs,dp); |
| 17 | + } |
| 18 | + return dp[ind][m][n]=max(pick,not_pick); |
| 19 | + |
| 20 | + } |
| 21 | + int findMaxForm(vector<string>& strs, int m, int n) { |
| 22 | + int k = strs.size(); |
| 23 | + vector<vector<vector<int>>>dp(k,vector<vector<int>>(m+1,vector<int>(n+1,-1))); |
| 24 | + return rec(k-1,m,n,strs,dp); |
| 25 | + } |
| 26 | +}; |
0 commit comments