474.一和零

class Solution {
public:
    int findMaxForm(vector<string>& strs, int m, int n) {
        // dp[i][j] 表示子集中最多i个0和j个1的最大子集长度
        vector<vector<int>>dp(1+m,vector<int>(1+n,0));
        // x = count(s.begin(),s.end(),'0');
        // y = s.size() - x;
        // dp[i][j] = max(dp[i][j],dp[i-x][j-y]+1)
        for (int u = 0; u < strs.size() ; u ++ ) {
            string s = strs[u];
            int x = count(s.begin(),s.end(),'0');
            int y = s.size() - x;
            for ( int i = m ; i >= x; i -- ) {
                for ( int j = n ; j >= y; j -- ) {
                    dp[i][j] = max(dp[i][j],dp[i-x][j-y]+1);
                }
            }
        }
        return dp[m][n];
    }
};

这个题很舒服,自己一下写过的