Zadanie Pudełka

0

Witam rozwiązuję zadanie w którym mam policzyć ile zostanie minimalnie sześciennych pudełek, jeżeli w większe pudełko można schować mniejsze, napisałem już rozwiązanie ale mój algorytm wywala się na jednym przypadku testowym, moglibyście mi go wskazać?
Oto kod:
#include <iostream>

using namespace std;

int N;
int *pudelka;

int main()
{
cin>>N;
pudelka=new int[N];
for(int i=0;i<N;i++)
{
cin>>pudelka[i];
}
int i=0;
int wynik=0;
int tmp_max=0;
while(i<N)
{
if(i>0 && pudelka[i]==pudelka[i-1])
{
tmp_max++;
}
else
{
if(tmp_max>wynik)
{
wynik=tmp_max;
}
tmp_max=0;
}
i++;
}
cout<<wynik+1;
int pausa=0;
cin>>pausa;
delete[] pudelka;
return 0;
}

0

A co ten kod niby robi?
Bo z tego co widze to jedyne co tutaj zrobisz to liczysz ile jest maksymalnie pudełek jakiegoś rozmiaru. Poza tym w sytuacji kiedy wszystkie pudełka są takie same wynik dasz 0 bo nie robisz nigdzie na końcu podstawienia wynik=tmp_max Może ja czegoś nie rozumiem, ale ten kod nie ma nic wspólnego z zadaniem które chcesz rozwiązać...

0

Rozwiązanie zadania -> problem plecakowy.

0

Nie chodzi mi o rozwiązanie, algorytm sprawdza mi platforma i nie zdaję jednego testu. Trochę poprawiłem ten algorytm ale dalej na jednym teście się wywala, możecie mi powiedzieć gdzie jest błąd:
int N;
int *pudelka;

int main()
{
cin>>N;
pudelka=new int[N];
for(int i=0;i<N;i++)
{
cin>>pudelka[i];
}
int i=0;
int wynik=0;
int tmp_max=0;
while(i<N)
{
if(pudelka[i]==pudelka[i+1])
{
tmp_max++;
}
else
{
if(tmp_max>wynik)
{
wynik=tmp_max;
}
tmp_max=0;
}
i++;
}
if(wynik==0)
{
wynik=tmp_max;
}
cout<<wynik+1;
int pausa=0;
cin>>pausa;
delete[] pudelka;
return 0;
}

0

Biorąc pod uwagę, że masz sześciany do opisu których wystarczy podać jeden wymiar to zadanie jest banalnie proste.
Pytanie brzmi jaki masz warunek na możliwość wsadzenia pudełka w pudełko? Jeśli tylko a<b to nie ma co kombinować (posortować i policzyć ile jest pudełek o równych rozmiarach), jeśli natomiast a<=b-C gdzie C to ustalona minimalna różnica wymiarów, to sprawa już jest nieco bardziej ciekawa.
Daj linka do dokładnego opisu problemu.

0

Bo masz bez sensu nakręcone, nawet tablicy nie trzeba:

int main()
  {
   unsigned N,Curr,Prev=0,Max=0,Tmp=1;
   cin>>N;
   while(N--)
     {
      cin>>Curr;
      if(Curr==Prev) ++Tmp;
      else
        {
         if(Max<Tmp) Max=Tmp;
         Tmp=1;
        }
      Prev=Curr;
     }
   cout<<(Max>Tmp?Max:Tmp)<<endl;
   return 0;
  }
0

@autor przecież napisałem ci gdzie masz błąd o_O Niby próbowałes go "poprawić" ale nieudolnie... Sytuacja o której mówiłem w ogóle zakłada że to co powinno być wynikiem jest na samym końcu danych wejściowych i jest jednym ciągiem, a nie że koniecznie wszystkie dane wejściowe są identyczne! Początkowe dane mogą być inne.

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