Długość uporządkowanego podzbioru

0

Mam takie zadanie:
Tablica
Limit pamięci: 64 MB
Kacper i Adi bardzo polubili system dwójkowy. Każdy z nich napisał na tablicy ciąg zer i jedynek. Kacper chciałby teraz w każdym z tych ciągów skreślić niektóre cyfry tak, żeby pozostałe ciągi były takie same oraz były uporządkowane, tj. po pierwszym wystąpieniu jedynki nie może już wystąpić żadne zero. Jaki najdłuższy ciąg może pozostać na tablicy?

Wejście
Pierwszy wiersz wejścia zawiera dwie liczby całkowite (), oznaczające długość ciągów napisanych przez kolejno Kacpra i Adiego. W drugim wierszu znajduje się cyfr 0 lub 1 - liczba napisana przez Kacpra. W trzecim wierszu znajduje się cyfr 0 lub 1 - liczba na wyświetlaczu Adiego.

Wyjście
Pierwszy i jedyny wiersz wyjścia powinien zawierać jedną liczbę - długość najdłuższego ciągu który może pozostać na tablicy.
Moje rozwiązanie:

#include <cstdio>

int main()
{  int lz1=0, lz2=0, n, m, lj1=0, lj2=0, wynik;
scanf("%d %d\n", &n, &m);
int w1[n], w2[m], mz1[n+1], mz2[m+1];
for (int i=0; i<n; i++)
    {scanf("%d", &w1[i]);
    if (w1[i]==0)
        {lz1++;
        mz1[lz1]=i;}
        else
            lj1++;
        }
        scanf("\n");
for (int j=0; j<m; j++)
    {scanf("%d", &w2[j]);
    if (w2[j]==0)
        {lz2++;
        mz2[lz2]=j;}
        else
            lj2++;
        }
        if (lj1>lj2)
            wynik=lj2;
        else
            wynik=lj1;
        lj1=0;
        lj2=0;
        int lz, lj;
    if (lz1>lz2)
        lz=lz2;
    else
        lz=lz1;
    for (int t=1; t<=lz; t++)
    {
       for (int c=mz1[t]+1; c<n; c++)
       {if (w1[c]=1)
        lj1++;}
        for (int d=mz2[t]+1; d<m; d++)
          {if (w2[d]=1)
        lj2++;}
        if (lj1>lj2)
            lj=lj2;
        else
            lj=lj1;

        if (t+lj>wynik)
        wynik=t+lj;

        lj1=0;
        lj2=0;
        lj=0;
    }


printf("%d", wynik);
    return 0;
}

Niestety często dla większych liczb wyświetla mi błędną (za dużą) wartość. Ktoś pomoże?

0

Sorry, już wszystko wiem. Pomyliłem "==" z "="

0
#include <iostream>
#include <string>
#include <algorithm>

int perform(std::string& input);

int main()
{
    int size1 = 0;
    int size2 = 0;
    std::string input1 = "";
    std::string input2 = "";
    std::cin >> size1 >> size2 >> input1 >> input2;
    
    auto result1 = perform(input1);
    auto result2 = perform(input2);
    std::cout << ((result1 > result2) ? result1 : result2);

	return 0;
}

int perform(std::string& input)
{
    auto firstOn1It = std::find(std::begin(input), std::end(input), '1');
    std::string result = "";
    if(firstOn1It != std::end(input)) {
        input.erase(std::remove(firstOn1It, std::end(input), '0'), std::end(input));
    }
      
    return input.size();
}

http://melpon.org/wandbox/permlink/a1UASmApZ8cjBnNH

1 użytkowników online, w tym zalogowanych: 0, gości: 1