找最长的串串,c++,动态规划,三维数组

1.题目描述

描述

给定一个集合S,共有k元素,集合的每个元素是由0和1组成的串。

现要求从中选出一些串,形成新的集合S1。这个新集合S1需要满足这样的条件:它所有串中0的个数之和不超过m,1的个数之和不超过n。

问你S1的元素个数最多是多少。

提示:从S中选择串放到S1中时,一个串只能选一次。

输入

第一行包含四个整数,k、r、m、n。k表示S中元素个数,r表示最长01串的长度,m表示0的个数的上限,n表示1的个数的上限。

后面后k行,每一行是一个01串。

输出

S1中最多包含S中的多少个01串。

样例

输入

5 6 5 3
10
0001
111001
1
0

输出 4

输入

3 2 1 1
10
1
0

输出 2

提示

对于30%的数据,保证有k<=20,r<=20,m<=100,n<=100;

对于60%的数据,保证有k<=300,r<=50,m<=500,n<=500;

对于全部的数据,保证有k<=1000,r<=100,m<=2000,n<=2000.

2.已写了代码,但是运行不成功,想麻烦各位帮帮忙,看看哪里有问题

代码如下:

#include<iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
char str[1001][100];
int f[2][2002][2002];
int w0[2002],w1[2002];
int count[1001];
int main()
{
    int g,r,m,n,i,j,k;
    cin>>g >>r>>m>>n;
    for(i=0;i<g;i++)
    {gets(str[i]);count[i]=strlen(str[i]);} 
    for(int row =0;row<g;row++)
    {
        for(int col=0;col<count[row];col++ )
        {
                if(str[row][col]=='0'){
                    w0[row]++;
                }else if(str[row][col]=='1'){
                    w1[row]++;
                }    
        }
    } 
    
    for ( int i = 0; i <= g; i++) {
        int newl=i%2;
        int oldl=(i-1)%2;
        for ( int j = 0; j <= m; j++) {
            for (int k = 0; k <= n; k++) {
                if(i==0 || j==0 || k==0) f[newl][j][k]=0;
                if (j < w0[i] || k < w1[i]) f[newl][j][k] = f[oldl][j][k];
                else {
                    f[newl][j][k] = max(f[oldl][j][k], f[oldl][j - w0[i]][k - w1[i]] + 1);
                    cout << f[oldl][j][k]<<" " <<f[oldl][j-w0[i]][k-w1[i]]<< endl;
                }
                 cout <<i<< " "<< j<<" " <<k<< " "<<f[i][j][k] << endl;
            }
        }
    }
    cout<<f[g%2][m][n];
    return 0;
 } 

使用的软件是DEV C++

 

把你运行不成功的具体现象描述仔细一些

 

是这题吗

https://leetcode-cn.com/problems/ones-and-zeroes/

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y

参考一下https://blog.csdn.net/it_xiangqiang/article/details/114734534,望采纳,不懂的可以关注私信我。