Informatika gyűjtemény

Egy szinttel feljebb Megoldás

2004050607080910

NézetNyomtat

Algoritmusok

Almák és banánok helyett egyszerűbb lesz úgy leírni a megoldásokat, mintha festenénk, "A" és "B" színnel.

0. ötlet - hibás, de javítható (Erben Péter)

Ha az utolsó karakterek egyeznek, akkor egy 1-gyel kisebb feladatot kell megoldani. Ha különböznek, akkor aszerint ágazhat el a rekurzió, hogy az utolsó karaktert átfestő lépés hol kezdődik. (A kezdete előtti rész optimumát a rekurzió kiszámítja.)

1. ötlet (Choung Do)

A következő segédtáblázatot vezessük be:
festésiköltség[200,200,2]
Itt festésiköltség[i,j,s] azt jelenti, hogy legkevesebb hány ecsetvonással készíthető el az [i..j] rész, ha első lépésként a teljes intervallumot s színnel festettük le. Ez a segédtáblázat lineáris lépésszámú algoritmussal előállítható, hiszen ha a teljes intervallumot lefestettük az s színnel, akkor az optimális megoldás ezután az 1-s színű "szigeteket" festi meg, ezek pedig az intervallum végigolvasása során meghatározhatók.
Belátható, hogy a 0. ötletben felvetett módszer javított változata már helyes: továbbra is aszerint ágazunk el, hogy az utolsó karaktert átfestő lépés hol kezdődik, de úgy képzeljük, hogy itt egy a festésiköltség tömbben kiszámolt lépésszámú műveletet végeztünk.

2. ötlet (Jeffrey Wang)

Ez lesz a klasszikus dinamikus programozási megoldás. A dp(i,j,típus) rekurzív függvény kiszámítását fogjuk táblázatolással gyorsítani. A típus lehet 0, 1 vagy 2, ahol 0 és 1 rendre az "A", "B" színeket, 2 pedig azt jelöli, hogy még nem festettünk. A függvény azt adja meg, hogy mennyi az [i..j] szakasz elkészítésének költsége, ha első lépésként a típusban jelölt színnel az egészet végigfestettük (illetve ha típus=2, akkor nem csináltunk még semmit).
Ha a sorozatok hossza n, akkor (Pascalos indexelést használva), a dp(1,n,2) hívás adja a feladat megoldását.

3. ötlet (Uray János)

Az F[2] tömb tárolja a legutolsó A és B festések végeit (A = 0, B = 1) In: Ha a legutóbbi A-sor (0) vagy a legutóbbi B-sor (1) teljesen a másikon belül van. Ha nem volt ilyen, akkor -1.

Kódok