474. Ones and Zeroes

来源:互联网 发布:人工智能研究热点 编辑:程序博客网 时间:2024/05/17 00:18

题意大概为给定指定数目的0和1,问最多可以组成多少个给定数组中的数。设数组d[i][j]表示i个0,j个1最多可以组成多少个,递推关系式为dp[j][k]=max(dp[j-zero(strs[i])][k-one(strs[i])]+1,dp[j][k]),分为是否选取当前元素,代码入下:

class Solution {public:    int zero(string s)    {        int t=0;        for(int i=0;i<s.size();i++)        {            if(s[i]=='0') t++;        }        return t;    }    int one(string s)    {        int t=0;        for(int i=0;i<s.size();i++)        {            if(s[i]=='1') t++;        }        return t;    }    int findMaxForm(vector<string>& strs, int m, int n) {        int dp[m+1][n+1];        for(int i=0;i<m+1;i++)        {            for(int j=0;j<n+1;j++) dp[i][j]=0;        }        for(int i=0;i<strs.size();i++)        {            for(int j=m;j>=zero(strs[i]);j--)            {                for(int k=n;k>=one(strs[i]);k--)                {                    dp[j][k]=max(dp[j-zero(strs[i])][k-one(strs[i])]+1,dp[j][k]);                }            }        }        return dp[m][n];    }};