Python 2, 154 Bytes
I,R=raw_input,range
P,T,L=map(int,I().split())
S=I()
D=R(P+1)
for r in R(P):D[1:r+2]=[min([D[c],D[c-1]+(S[r]<".")][c%L>0:])for c in R(1,r+2)]
print D[T*L]
Ein unkomplizierter DP-Ansatz. Ein fairer Teil des Programms liest nur Eingaben.
Erläuterung
Wir berechnen eine dynamische 2D-Programmiertabelle, in der jede Zeile den ersten nParkplätzen entspricht und jede Spalte der Anzahl der bisher platzierten LKWs (oder Teile eines LKWs) entspricht. Insbesondere kbedeutet Spalte , dass wir bisher k//Lvolle LKWs platziert haben und k%Lauf dem Weg zu einem neuen LKW sind. Jede Zelle ist dann die minimale Anzahl von Autos, die gelöscht werden müssen, um den Zustand zu erreichen (n,k), und unser Zielzustand ist (P, L*T).
Die Idee hinter der DP-Wiederholung ist die folgende:
- Wenn wir Platz
k%L > 0für einen neuen LKW haben, besteht unsere einzige Möglichkeit darin, Platz k%L-1für einen neuen LKW zu haben
- Andernfalls, wenn
k%L == 0wir dann entweder gerade einen neuen LKW fertiggestellt haben oder den letzten LKW bereits fertiggestellt haben und seitdem einige Parkplätze übersprungen haben. Wir nehmen das Minimum der beiden Optionen.
Wenn k > nwir also mehr LKW-Plätze platziert haben, als es Parkplätze gibt, dann setzen wir ∞auf Staat (n,k). Aber zum Zwecke des Golfspiels setzen wir, kda dies der schlimmste Fall ist, jedes Auto zu entfernen, und auch als Obergrenze dient.
Das war ein ziemlicher Schluck, also lassen Sie uns ein Beispiel geben, sagen wir:
5 1 3
..##.
Die letzten beiden Zeilen der Tabelle sind
[0, 1, 2, 1, 2, ∞]
[0, 0, 1, 1, 1, 2]
Der Eintrag bei Index 2 der vorletzten Zeile ist 2, da dies die einzige Option ist, um einen Zustand 2//3 = 0voller platzierter LKWs zu erreichen, die platziert sind und Platz 2%3 = 2für einen neuen LKW bieten:
TT
..XX
Der Eintrag bei Index 3 der vorletzten Zeile ist jedoch 1, da das Optimum erreicht ist , um einen Zustand 3//3 = 1voller platzierter LKWs zu erreichen, die Platz 3%3 = 0für einen neuen LKW bieten
TTT
..X#
Der Eintrag in Index 3 der letzten Zeile betrachtet die beiden oben genannten Zellen als Optionen. Nehmen wir den Fall, in dem wir zwei Leerzeichen für einen neuen LKW haben, und beenden Sie ihn, oder nehmen wir den Fall, in dem wir einen vollen LKW haben schon fertig?
TTT TTT
..XX. vs ..X#.
Letzteres ist eindeutig besser, also setzen wir eine 1.
Pyth, 70 Bytes
JmvdczdKw=GUhhJVhJ=HGFTUhN XHhThS>,@GhT+@GTq@KN\#>%hT@J2Z)=GH)@G*@J1eJ
Grundsätzlich ein Port des obigen Codes. Noch nicht sehr gut Golf gespielt. Probieren Sie es online aus
Erweitert
Jmvdczd J = map(eval, input().split(" "))
Kw K = input()
=GUhhJ G = range(J[0]+1)
VhJ for N in range(J[0]):
=HG H = G[:]
FTUhN for T in range(N+1):
XHhT H[T+1] =
hS sorted( )[0]
> [ :]
, ( , )
@GhT G[T+1]
+@GTq@KN\# G[T]+(K[N]=="#")
>%hT@J2Z (T+1)%J[2]>0
)=GH G = H[:]
)@G*@J1eJ print(G[J[1]*J[-1]])
Wenn nur Pyth mehrere Zuordnungen zu> 2 Variablen hätte ...
P,K,L=map(int,input().split())Q=list(input()) l=[(L,0)]*K for j in range(len(Q)-L): if Q[j:j+L].count('#')<l[i][0]: l[i]=Q[j:j+L].count('#'),j del Q[l[i][1]:l[i][1]+L] print(sum([x[0]for x in l]))