Afişează mesaje
|
|
Pagini: [1]
|
|
3
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva educationala / Răspuns: 047 Algoritmul Bellman-Ford
|
: Februarie 22, 2011, 21:59:58
|
Am implementat bellman ford cu coada cu liste si a aparut o problema... Structura e struct lista { int inf,c; lista *nod; } *g[nmax];
si nmax din ce stiu eu inseamna numarul de noduri... si 1 ≤ N ≤ 50 000 din enunt. cu 50 005 iau killed by signal, cu m ( 250 005 ) pus iau la fel killed by signal, bea cu 500 005 iau 100 puncte. E gresit in enunt sau problema este de la mine? Tot ce am modificat a fost doar nmaxul respectiv ca sa obtin 100.
|
|
|
|
|
5
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: OJI 2002, a IX-a, Solutii
|
: Ianuarie 02, 2011, 03:55:54
|
of of ... faza cu backtrackingul era doar de verificare a rezultatului. din moment ce tu nu ai teste oficiale / sau nu e pe infoarena/campion cum vrei sa te verifici ? 4 directii... nu am citit problema in amanunte... e o problema clasica... in fine. Daca intrebi de backtracking la a IX-a ... banuiesc ca nu stii recursivitate deci vorbesc singur T_T ideea era ... sa iti faci 2 vectori de deplasare, dx si dy cu valorile -1, 0, 1, 0 si 0, 1, 0, -1 si sa apelezi backtrackingul dupa pozitia i si j... in el faceai un for de la 0 la 4 pentru deplasare... si foloseai inca o matrice uz [j] = 1 daca a mai fost pe acolo sau nu... din ce-am citit parca iti cere din (1, 1) in (n, m) sa ajungi... si de fiecare data cand atingi n, m verifici daca e mai mare ca maximul curent...
nah si daca vrei si drumul... de fiecare data cand gasesti un maxim nou, faci reconstituirea recursiv... ai putea de fapt in loc sa folosesti uz[j] = 1 sau 0 sa pui chiar o valoare care tot creste pana ajunge in (n, m)... daca esti in i, j si te duci la dreapta, in uz[j+1] = uz[j] + 1; si pe baza asta faci recursiv... din (n, m) cauti cu unu mai mic... de acolo iar cu unu mai mic si tot asa 
....
am uitat de italic .. ma rog cred ca se intelege
|
|
|
|
|
6
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: OJI 2002, a IX-a, Solutii
|
: Ianuarie 02, 2011, 01:14:30
|
Faci un backtracking. pe 8 directii ( parca asa cere ), iti faci vectorii aia si te duci pe fiecare drum posibil si.. la sfarsit afisezi doar maximul ala sau cat iti cere si cam asa te verifici. ( reconstituirea drumului nu cred ca fi o problema ... daca a aflat bine maximul ... da-l incolo de drum  ) iar pentru teste dai pur si simplu ... random. pui si tu valori mai mici in matrice  intre 1 si 10 nah.. vezi tu ... oricum backtrackingul asta merge repede implementat..
|
|
|
|
|
8
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: OJI 2002, a IX-a, Solutii
|
: Ianuarie 01, 2011, 23:33:19
|
Poti folosi codeblocks sa vezi in cat timp iti ruleaza si dai pe un test random ... fisierul .in continand doar n, m si o matrice n-ar fi mare chestie. Mai erau o functie/ sau functii sa iti afiseze si timpul de executie, dar nu le-am folosit niciodata, doar le-am vazut prin alte surse ... poate aici gasesti http://www.cplusplus.com/forum/beginner/1769/ Iar codul sursa ... din ce m-am uitat pe el nu stiu daca da mereu solutia cea mai buna ... asta ai verificat ? Intra sigur in 1 s oricum ... din ce vad faci doar n*m maxim (acuma nush cat e n si m ... )
|
|
|
|
|
14
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 025 Munte
|
: Decembrie 20, 2010, 12:50:57
|
|
Pentru 3 8 4 si punctele 2, 2, 3, 1 o parcurgere de genul - urc 2 bete in sus, 2 bete la dreapta, un bat in sus si 3 in jos
e corecta?
|
|
|
|
|
17
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 004 Biti
|
: Decembrie 08, 2010, 22:42:33
|
|
Am incercat un backtracking cu vector de blocaj si iau maxim = 2^n si din fiecare combinatie fac << 1 sau (... << 1) + 1 si rezultatul sa nu fie mai mare ca maxim. Problema e cand ajunge la ceva in genul 110 si sa ma duc in 100... daca fac 110<<1 imi da 1100 > maxim si (110<<1)+1 imi da 1101 care e la fel > maxim.
Cum naiba retin blocajele ?
|
|
|
|
|
18
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 1019 Kmax
|
: Decembrie 06, 2010, 18:22:30
|
M-am uitat pe solutia oficiala si am vazut ca au a [ i ] [j] = numarul de permutari de lungime i cu ultima subsecventa crescatoare avand lungimea j si... a[ i ][j] = a[i-1][j] + a[i-1][j-1] a[ i ][j] = a[q][k-1] * a[i-q-1][j] * comb[i-1][q] si ma gandeam de ce nu ar fi bun asa a[ i ][j] = a[i-1][j] + a[i-1][j-1] a[ i ][j] = (a[q][k-1] + a[i-q-1][j]) * comb[i-1][q] pentru ca am nevoie de numarul de permutari cu lungimea q cu ultima subsecventa de lungime j + cealalta bucata a[i-q-1][j] si in final combinarile ca sa vad plasarile in q si i-q-1 
|
|
|
|
|