[ 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...
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.