| 1234567891011121314151617181920212223242526272829303132333435363738394041 | 
							- func findMaxForm(strs []string, m int, n int) int {
 
- 	o := len(strs)
 
- 	dp := make([][][]int, m+1)
 
- 	for i := range dp {
 
- 		dp[i] = make([][]int, n+1)
 
- 		for j := range dp[i] {
 
- 			dp[i][j] = make([]int, o+1)
 
- 		}
 
- 	} // dp[i][j][k] = max(dp[i][j][k-1], dp[i-dm][j-dn][k-1] + 1)
 
- 	for i := 0; i <= m; i++ {
 
- 		for j := 0; j <= n; j++ {
 
- 			for k := 1; k <= o; k++ {
 
- 				dm, dn := zeroAndOne(strs[k-1])
 
- 				if dm <= i && dn <= j {
 
- 					dp[i][j][k] = maxInt(dp[i][j][k-1], dp[i-dm][j-dn][k-1]+1)
 
- 				} else {
 
- 					dp[i][j][k] = dp[i][j][k-1] // Important!
 
- 				}
 
- 			}
 
- 		}
 
- 	}
 
- 	return dp[m][n][o]
 
- }
 
- func zeroAndOne(s string) (zero, one int) {
 
- 	for _, r := range s {
 
- 		if r == '0' {
 
- 			zero++
 
- 		} else if r == '1' {
 
- 			one++
 
- 		}
 
- 	}
 
- 	return
 
- }
 
- func maxInt(x, y int) int {
 
- 	if x < y {
 
- 		return y
 
- 	}
 
- 	return x
 
- }
 
 
  |