题目:
题解:
void getZerosOnes(int* zerosOnes, char* str) {
int length = strlen(str);
for (int i = 0; i < length; i++) {
zerosOnes[str[i] - '0']++;
}
}
int findMaxForm(char** strs, int strsSize, int m, int n) {
int length = strsSize;
int dp[m + 1][n + 1];
memset(dp, 0, sizeof(dp));
for (int i = 0; i < length; i++) {
int zerosOnes[2];
memset(zerosOnes, 0, sizeof(zerosOnes));
getZerosOnes(zerosOnes, strs[i]);
int zeros = zerosOnes[0], ones = zerosOnes[1];
for (int j = m; j >= zeros; j--) {
for (int k = n; k >= ones; k--) {
dp[j][k] = fmax(dp[j][k], dp[j - zeros][k - ones] + 1);
}
}
}
return dp[m][n];
}