Python 2, 154 bayt
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]
Basit bir DP yaklaşımı. Programın adil bir parçası sadece girdi okumaktır.
açıklama
Her sıranın ilk npark yerlerine karşılık geldiği ve her bir sütunun şimdiye kadar yerleştirilen kamyon (veya bir kamyonun parçaları) sayısına karşılık geldiği bir 2D dinamik programlama tablosu hesaplıyoruz . Özellikle sütun k, şu k//Lana kadar dolu kamyonları yerleştirdiğimiz ve k%Lyeni bir kamyonun yolunda olduğumuz anlamına geliyor . Her hücre daha sonra devlete ulaşmak için temizlenecek minimum araba sayısıdır (n,k)ve hedef durumumuzdur (P, L*T).
DP nüksünün arkasındaki fikir şudur:
- Eğer
k%L > 0yeni bir kamyon için boşluklarsak, tek seçeneğimiz k%L-1yeni bir kamyon için boşluk olmaktan gelmektir.
- Aksi takdirde
k%L == 0, yeni bir kamyonu bitirdiysek ya da son kamyonu zaten bitirdik ve o zamandan beri birkaç park yerini atladık. İki seçenekten en az birini alıyoruz.
Eğer k > n, park noktalar vardır daha daha kamyon kareler yerleştirdiğiniz yani, o zaman koymak ∞devlet için (n,k). Ancak golf amaçlı olarak, kher arabayı çıkarmanın en kötü örneği olduğu için koyduk ve aynı zamanda bir üst sınır görevi görüyor.
Bu oldukça ağız doluydu, bir örnek verelim:
5 1 3
..##.
Tablonun son iki satırı
[0, 1, 2, 1, 2, ∞]
[0, 0, 1, 1, 1, 2]
İkinci son sıranın indeks 2'sindeki giriş 2'dir, çünkü yeni bir kamyon için 2//3 = 0yerleştirilmiş ve 2%3 = 2yeni bir kamyon için boşluklar olan tam kamyon durumuna ulaşmak için tek seçenek budur:
TT
..XX
Ancak ikinci son satırın 3. dizinindeki giriş 1'dir, çünkü yeni bir kamyon için 3//3 = 1yerleştirilmiş ve 3%3 = 0yeni bir kamyon için boşluklar olan tam kamyon durumuna ulaşmak için en uygun olanı
TTT
..X#
Son satırın 3. dizinindeki giriş, yukarıdaki iki hücreye seçenekler olarak bakar - yeni bir kamyon için 2 boşluk olduğumuz vakayı alıp bitirir miyiz yoksa tam kamyonumuzun olduğu vakayı alır mıyız? zaten bitti mi?
TTT TTT
..XX. vs ..X#.
Açıkçası ikincisi daha iyidir, bu yüzden 1'i indirdik.
Pyth, 70 bayt
JmvdczdKw=GUhhJVhJ=HGFTUhN XHhThS>,@GhT+@GTq@KN\#>%hT@J2Z)=GH)@G*@J1eJ
Temelde yukarıdaki kodun bir portu. Henüz çok iyi golf değil. Çevrimiçi deneyin
Expanded
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]])
Şimdi, sadece Pyth'in> 2 değişkene birden fazla ataması olsaydı ...
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]))