Leetcode_474. 一和零(二维01背包)

每个字符串看成一个物品,两个属性是0和1的个数,转换为01背包。

code

class Solution {
public:
    int w[605][2];
    int dp[105][105];
    int v[605]={1};
    int findMaxForm(vector<string>& strs, int m, int n) {
        int len=strs.size();
        for(int i=0;i<len;i++){
            int siz=strs[i].size();
            for(int j=0;j<siz;j++){
                w[i][strs[i][j]-'0']++;
            }
        }
        int ans=0;
        for(int k=0;k<len;k++){
            for(int i=m;i>=0;i--){
                for(int j=n;j>=0;j--){
                    if(i>=w[k][0] && j>=w[k][1]){
                        dp[i][j]=max(dp[i][j],dp[i-w[k][0]][j-w[k][1]]+1);
                        ans=max(ans,dp[i][j]);
                    }
                }
            }
        }
        return ans;
    }
};
posted @ 2020-03-30 10:39  Keane1998  阅读(168)  评论(0编辑  收藏  举报