[ marko921 @ 14.01.2008. 11:13 ] @
Pre svega pozdrav za sve ljude dobre volje,ucim neko vreme c++ i sad sam krenuo da resavam neke zadatke i zapeo,problem je valda trivijalan za iskusnije programere ali ja jednostavno ne mogu da shvatim algoritam..da ne kopiram ceo zadatk,ovde se moze naci http://www.bhoi.net/zadaci/utovar.htm kao i resenje ovde http://www.bhoi.net/zadaci/utovar.cpp.txt radi citljivijeg koda resenje sam ovako postavio

Code:

#include <fstream.h>

   int main(void) {
  int I,J,N,M,Z,
  Vel[1000],Cijena[1000],Zarada[1000];
  ifstream Ulaz("UTOVAR.IN"); ofstream Izlaz("UTOVAR.OUT");
  Ulaz>>M>>N;
  for(J=1;J<=N;J++){ 
    Ulaz>>Vel[J];
   }
   for(J=1;J<=N;J++) 
   {
    Ulaz>>Cijena[J];
   }
  for(I=0;I<=M;I++) 
  {
    Zarada[I]=0;
  }
  for(J=1;J<=N;J++)
    for(I=Vel[J];I<=M;I++) {
      Z=Zarada[I-Vel[J]]+Cijena[J];
      if(Zarada[I]<Z) Zarada[I]=Z;
    }
  Izlaz<<Zarada[M];
  return 0;
}


Ono sto ja razumem je sledece, unose se vrednosti u promenljive i nizove,i onda ovaj deo koda nikako ne razumem
Code:

 for(J=1;J<=N;J++)
    for(I=Vel[J];I<=M;I++) {
      Z=Zarada[I-Vel[J]]+Cijena[J];
      if(Zarada[I]<Z) Zarada[I]=Z;
    }


Zamolio bih nekog da mi objasni taj algoritam koji izvrsava gore navedeni kod,i da li imate neku preporuku o knjizi za algoritme posle koje cu moci da savladam ovakve stvari bez vase pomoci?
[ laki_srt @ 15.01.2008. 21:23 ] @
Ne znam bas dobro objasnjavati,tako da bolje sacekaj da ti neko drugi objasni jer ja cu te samo zbuniti. A sto se tice zadataka nemoj odmah poceti sa tezim zadatcima pocni sa zadatcima tipa nadji maximum,minimum,neke matematicke funkcije,cak ti i savetujem da iste te programe odradis vise puta,da ispitujes kad nesto izostavis sta se desava,da vidis kako mozes najelegantnije da uradis isti taj program,eksperimentisi......
[ idb @ 16.01.2008. 13:24 ] @
Ako ti nije jasan zadatk - probaj da ga procitas ponovo (meni se ne cita),
a ako ti deo koda izgleda komplikovano, evo ovako je malo jasniji (cini mi se):
Code:

for(J=1;J<=N;J++){
    int Tmp1 = Vel[J];        // Odavde (od Tmp1) polazi brojac 'I' u sledecoj petlji
    for(I=Tmp1; I<=M; I++) {
        int Tmp2 = I - Tmp1;  // Index clana niza u sledecem redu ...
        Z = Zarada[Tmp2] + Cijena[J];  // Izracunam neko 'Z', pa u zavisnoti od njega ....
        if (Zarada[I]<Z) {
            Zarada[I] = Z;
        }
        else {
            // Zarada[I] = ono sto je i pre bila ... ;
        }
    }
}

pozdrav idb
[ dr_z @ 31.01.2008. 21:27 ] @
Zadatak je trivijalan primer klase problema koji se rjesavaju dinamickim programiranjem.
O tome mozes da nadjes dosta tutoriala na netu...
Sto se tice knjiga, ima ih dosta, jedna od boljih je "Introduction to algorithms" T.H. Cormen,
pokusaj je naci.
Inace, sve sto u nazivu ima "algorithms" je manje-vise korisno...