Ezt hogy lehet optimálisabban megoldani?
"Kedvenc táblás csokink kétféle kiszerelésben kapható. Az egyik A darab szegmensből áll, a másik B darabból. Mi összesen C darab szegmenst szeretnénk vásárolni.
Ha csak egész táblákat vehetünk és mindkét kiszerelésből korlátlan számban vásárolhatunk, akkor mennyi szegmensünk lehet maximum, ami még nem több C darabnál?
1 <= A, B, C <= 1000"
Pl.:
A = 5
B = 7
C = 13
Megoldás: 12
Magyarázat:
- vehetünk 2db B-t, de 2*7>13 és nem akarunk többet C-nél
- vehetünk 1db A-t és 1db B-t, ez 12 lesz, eggyel kisebb C=13-nál, potenciális megoldás
- vehetünk 2db A-t, ez 10 lesz, ez is egy potenciális megoldás, de az előzővel jobban járunk
- vehetünk 1db A-t vagy 1db B-t, de ezeknél jobban járunk a korábbi potenciális megoldással
- van még végtelen számú más lehetőség, de ezek mind nagyobbak C-nél
Megcsináltam rekurzívan mélységben-először kereséssel de már 30 körüli értékekre is percekig fut bizonyos esetekben és elvileg 1000 a maximum.
De hát amit én írtam, az is brute force... brútforszolni lehet bután (feleslegsen lassan) és jobban.
Jó, nem kell modulo, de modulo helyett osztással és kivonással is meg lehet oldani azt amit írtam... nem gondoltam, hogy az egy olyan nagy dolog.
Bár tény, hogy az n^2-es algoritmusban nem kell szorzás/osztás sem...
Egyébként a moduloval tisztában van a kérdező az egyik válasza alapján.
És még egyébként az általam írt algoritmust is bőven lehetne gyorsítani, csak akkor már tényleg bonyolódna... pl. a*b-ig keresni bizonyos módon... csak a példákban az nagyobb mint a c... úgyhogy ez csak nagy c-kre (és hozzá tartozó kisebb a,b-kre) érdemes.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!