comefrom: <gouthampradhan>dynamic_programming_OnesAndZeroes_1.java
code: public int findMaxForm(String[] strs, int m, int n) {
      int[][][] dp = new int[strs.length + 1][m + 1][n + 1];
      for (int i = strs.length - 1; i >= 0; i--) {
        String string = strs[i];
        int zero = 0;
        int one = 0;
        for (char c : string.toCharArray()) {
          if (c == '0') {
            zero++;
          } else {
            one++;
          }
        }
        for (int p = m; p >= 0; p--) {
          for (int q = n; q >= 0; q--) {
            dp[i][p][q] = dp[i + 1][p][q];
            if (p - zero >= 0 && q - one >= 0) {
              dp[i][p][q] = Math.max(dp[i][p][q], dp[i + 1][p - zero][q - one] + 1);
            }
          }
        }
      }
      return dp[0][m][n];
    }
masked: public int sample_funcname ( String [ ] var_0 , int var_1 , int var_2 ) {
    int [ ] [ ] [ ] var_3 = new int [ var_0 . length + 1 ] [ var_1 + 1 ] [ var_2 + 1 ] ;
    for ( int var_4 = var_0 . length - 1 ;
    var_4 >= 0 ;
    var_4 -- ) {
      String var_5 = var_0 [ var_4 ] ;
      int var_6 = 0 ;
      int var_7 = 0 ;
      for ( char var_8 : var_5 . toCharArray ( ) ) {
        if ( var_8 == '0' ) {
          var_6 ++ ;
        }
        else {
          var_7 ++ ;
        }
      }
      for ( int var_9 = var_1 ;
      var_9 >= 0 ;
      var_9 -- ) {
        for ( int var_10 = var_2 ;
        var_10 >= 0 ;
        var_10 -- ) {
          var_3 [ var_4 ] [ var_9 ] [ var_10 ] = var_3 [ var_4 + 1 ] [ var_9 ] [ var_10 ] ;
          if ( var_9 - var_6 >= 0 && var_10 - var_7 >= 0 ) {
            var_3 [ var_4 ] [ var_9 ] [ var_10 ] = Math . max ( var_3 [ var_4 ] [ var_9 ] [ var_10 ] , var_3 [ var_4 + 1 ] [ var_9 - var_6 ] [ var_10 - var_7 ] + 1 ) ;
          }
        }
      }
    }
    return var_3 [ 0 ] [ var_1 ] [ var_2 ] ;
  }
  