郓城县城乡和建设局网站,门业网站模板,中企动力员工感受,wordpress首页只能是page1. 题目
在计算机界中#xff0c;我们总是追求用有限的资源获取最大的收益。
现在#xff0c;假设你分别支配着 m 个 0 和 n 个 1。另外#xff0c;还有一个仅包含 0 和 1 字符串的数组。
你的任务是使用给定的 m 个 0 和 n 个 1 #xff0c;找到能拼出存在于数组中的字…1. 题目
在计算机界中我们总是追求用有限的资源获取最大的收益。
现在假设你分别支配着 m 个 0 和 n 个 1。另外还有一个仅包含 0 和 1 字符串的数组。
你的任务是使用给定的 m 个 0 和 n 个 1 找到能拼出存在于数组中的字符串的最大数量。每个 0 和 1 至多被使用一次。
注意:
给定 0 和 1 的数量都不会超过 100。
给定字符串数组的长度不会超过 600。示例 1:
输入: Array {10, 0001, 111001, 1, 0}, m 5, n 3
输出: 4
解释: 总共 4 个字符串可以通过 5 个 0 和 3 个 1 拼出
即 10,0001,1,0 。示例 2:
输入: Array {10, 0, 1}, m 1, n 1
输出: 2
解释: 你可以拼出 10但之后就没有剩余数字了。
更好的选择是拼出 0 和 1 。来源力扣LeetCode 链接https://leetcode-cn.com/problems/ones-and-zeroes 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。 2. 解题
0-1背包的变种两个维度背包容量为m,n, 求能装下的单词最多
class Solution {
public:int findMaxForm(vectorstring strs, int m, int n) {int i, j, k, one, zero, len strs.size(), maxcount 0;vectorvectorint dp(m1,vectorint(n1,-1));//dp[i][j] 表示使用i个0j个1 时对应的最大单词数个数dp[0][0] 0;//初始化for(i 0; i len; i)//遍历每个单词{one count01(strs[i]);zero strs[i].size()-one;for(j m-zero; j 0; --j){ //逆序遍历one,zero后新生成的状态不会干扰本次for(k n-one; k 0; --k){if(dp[j][k] ! -1)//存在的状态{ //转移到的状态 dp[jzero][kone]dp[jzero][kone] max(dp[jzero][kone], dp[j][k]1);maxcount max(maxcount, dp[jzero][kone]);}}}}return maxcount; }int count01(string s){int one 0;for(int i 0; i s.size(); i){if(s[i]1) one;}return one;}
};