पायथन 2, 154 बाइट्स
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]
एक सीधा डीपी दृष्टिकोण। कार्यक्रम का एक अच्छा हिस्सा सिर्फ इनपुट पढ़ रहा है।
व्याख्या
हम एक 2 डी गतिशील प्रोग्रामिंग टेबल की गणना करते हैं जहां प्रत्येक पंक्ति पहले nपार्किंग स्पॉट से मेल खाती है, और प्रत्येक कॉलम अब तक रखे गए ट्रकों (या एक ट्रक के कुछ हिस्सों) की संख्या से मेल खाती है। विशेष रूप से, स्तंभ का kअर्थ है कि हमने k//Lअभी तक पूर्ण ट्रक रखे हैं, और हम k%Lएक नए ट्रक के लिए रास्ते में हैं। प्रत्येक सेल राज्य तक पहुँचने के लिए स्पष्ट कारों की न्यूनतम संख्या है (n,k), और हमारा लक्ष्य राज्य है (P, L*T)।
डीपी पुनरावृत्ति के पीछे का विचार निम्नलिखित है:
- यदि हम
k%L > 0एक नए ट्रक के लिए स्थान बना रहे हैं , तो हमारा एकमात्र विकल्प k%L-1नए ट्रक के लिए रिक्त स्थान होने से है
- अन्यथा अगर
k%L == 0तब हम या तो एक नया ट्रक समाप्त कर चुके हैं, या हम पहले से ही अंतिम ट्रक समाप्त कर चुके हैं और कुछ पार्किंग स्थलों को छोड़ दिया है। हम दो विकल्पों में से न्यूनतम लेते हैं।
यदि k > n, हमने पार्किंग की जगह की तुलना में अधिक ट्रक वर्गों को रखा है, तो हम ∞राज्य के लिए डालते हैं (n,k)। लेकिन गोल्फिंग के प्रयोजनों के लिए, हम डालते हैं kक्योंकि यह हर कार को हटाने का सबसे खराब मामला है, और ऊपरी सीमा के रूप में भी कार्य करता है।
यह काफी मुखर था, तो चलिए एक उदाहरण देते हैं, कहते हैं:
5 1 3
..##.
तालिका की अंतिम दो पंक्तियाँ हैं
[0, 1, 2, 1, 2, ∞]
[0, 0, 1, 1, 1, 2]
दूसरी अंतिम पंक्ति के सूचकांक 2 में प्रवेश 2 है, क्योंकि एक 2//3 = 0पूर्ण ट्रक की स्थिति तक पहुंचने 2%3 = 2के लिए और एक नए ट्रक के लिए रिक्त स्थान होने के नाते , यह एकमात्र विकल्प है:
TT
..XX
लेकिन दूसरी अंतिम पंक्ति के सूचकांक 3 में प्रवेश 1 है, क्योंकि एक 3//3 = 1पूर्ण ट्रक की स्थिति तक पहुंचने 3%3 = 0के लिए और एक नए ट्रक के लिए रिक्त स्थान होने के नाते , इष्टतम है
TTT
..X#
अंतिम पंक्ति के सूचकांक 3 में प्रवेश उपरोक्त दो कोशिकाओं को विकल्प के रूप में देखता है - क्या हम उस मामले को लेते हैं जहां हम एक नए ट्रक के लिए 2 रिक्त स्थान हैं और इसे खत्म कर देते हैं, या क्या हम उस मामले को लेते हैं जहां हमारे पास एक पूर्ण ट्रक है पहले से खत्म कर दिया?
TTT TTT
..XX. vs ..X#.
स्पष्ट रूप से उत्तरार्द्ध बेहतर है, इसलिए हम नीचे 1 डालते हैं।
पायथ, 70 बाइट्स
JmvdczdKw=GUhhJVhJ=HGFTUhN XHhThS>,@GhT+@GTq@KN\#>%hT@J2Z)=GH)@G*@J1eJ
मूल रूप से उपरोक्त कोड का एक पोर्ट। अभी तक बहुत अच्छी तरह से गोल्फ नहीं है। इसे ऑनलाइन आज़माएं
विस्तारित
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]])
अब, यदि केवल Pyth को> 2 चर ...
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]))