C# Van egy hátizsák aminek van egy teherbíró kapacitása, hogyan pakolom teli legoptimálisabban egyes tárgyakkal amiknek meg van adva a súlya?
pl: hátizsák kapacitás: 6 kg
tárgy1: 2 kg
tárgy2: 3 kg
tárgy3: 4 kg
Legoptimálisabb választás az 1. és a 3. tárgy lenne.
Mindezt visszalépéses kereséssel kellene megcsinálni.
(Nem hátizsák probléma, mert ott a tárgyakhoz értékeket is rendelnek!)
Hát, próbáld ki az összes lehetséges változatot (2^3 féle) és amelyik a legjobban kitölti.
Nem optimalizált, de működik. :)
"Nem hátizsák probléma, mert ott a tárgyakhoz értékeket is rendelnek!"
Visszavezethető arra. A tárgy értéke legyen a súlyával arányos. Kézenfekvő hogy a tárgy értéke legyen a súlya.
"Azt, hogy a megoldás legjobban kihasználja a hátizsák tartalmát."
Tehát a legoptimálisabb az a legjobb. ÍGY MÁR NYILVÁNVALÓ PETI!
De tényleg, mi a legjobb? A lehető legnagyobb súly, az világos. És emellett a legtöbb dolog, vagy nekünk a nehezebb cuccok többet érnek? Mit értünk legjobb alatt?
Sikerült összeállítani egyfajta megoldást a problémára:
i=-1;
vege=false
N=tárgyak elemszáma
indexek=null //Az a tömb, vagy lista ami tárolja a tárgyak indexeit
Ciklus amíg (!vége)
--i++
--Ciklus amíg(i < N és !Megfelel(i, indexek))
----//Megfelel ha eddigi indexek össztömege +=tárgyak[i].tömege<=N
----i++;
--Ciklus vége
--Ha (i < N)
----Indexbe i
--Különben
----Ha (jelenlegi indexekből összeállt tömegek optimálisabb mint az előző optimális) akkor optimálisindexek = indexek
----//optimális akkor ha az előzőleg eltárolt optimális megoldásnál nagyobb a tömege
----Ha (indexek=null) akkor vege=true
----Különben
------i=indexekből az utolsó elem
------indexekből utolsó elem törlése
----Elágazás vége
--Elágazás vége
Ciklus vége
*Elírtam ott hogy:
eddigi indexek össztömege +=tárgyak[i].tömege<=6
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!