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?