Module: मध्य में मिलें


Problem

1 /5


मोडुलो अधिकतम अनुवर्ती

Theory Click to read/hide

बीच में मिलें
बीच में मिलें - अनुकूलित करने का एक तरीका समाधान, जिसमें मूल समस्या को दो हिस्सों में तोड़ना, प्रत्येक को स्वतंत्र रूप से हल करना और फिर आधे हिस्सों के समाधानों को मिलाकर मूल समस्या का समाधान प्राप्त करना शामिल है।

तदनुसार, अगर दो शर्तें पूरी होती हैं, तो meet-in-the-middle का उपयोग करना समझ में आता है।
1) समस्या के आधे हिस्से को हल करने के लिए आवश्यक समय पूरी समस्या को हल करने के समय की तुलना में विषम रूप से कम है।
2) आधी-अधूरी समस्याओं को हल करके, कोई भी मूल पूरी समस्या का समाधान प्राप्त कर सकता है, और साथ ही, पूरी समस्या को हल करने की तुलना में विषम रूप से तेजी से।
 
उदाहरण
मान लीजिए पूर्णांक A, B, C और D की चार सरणियाँ हैं। प्रत्येक सरणी से ठीक एक संख्या का चयन करना आवश्यक है ताकि इन संख्याओं का योग शून्य के बराबर हो। आप सरल समाधान का उपयोग कर सकते हैं, अर्थात्, बस सभी संभावित विकल्पों की गणना करें। यह O(n4) के लिए काम करेगा।

हालांकि, हम meet-in-the-middle का उपयोग कर सकते हैं।
ध्यान दें कि a + b + c + d = 0 (a + b) = -(c + d) के बराबर है।
आइए कार्य को दो हिस्सों में विभाजित करें, अर्थात्, पहली छमाही में हम केवल A और B का उपयोग करेंगे, और दूसरी छमाही में केवल C > और <कोड>डी
आइए पहली छमाही में सभी संभावित (a + b) विकल्पों पर पुनरावृति करें और सभी मानों को एक हैश तालिका (unordered_map, HashMap या पसंद है।) यह O(n2) में काम करता है।
अब हम दूसरी छमाही में (c + d) सभी संभावित विकल्पों पर पुनरावृति करेंगे। एक निश्चित विकल्प पर विचार करते समय, हम जाँच करेंगे कि क्या हैश तालिका में विपरीत चिह्न के वर्तमान योग से जुड़ा कोई मान है (तब हमें दो पारस्परिक मिले जो शून्य तक जुड़ते हैं)। यह भाग O(n2) में भी काम करता है।
हमारे यहाँ एक अलग "उत्तर मर्ज" चरण नहीं है; एक में, हमने प्रत्येक भाग को हल करने के क्रम में ऐसा किया। अधिकांश कार्यों में एक जैसी स्थिति होगी।
हमें O(n2) में meet-in-the-middle का उपयोग करके एक समाधान मिला।

यह ध्यान देने योग्य है कि एक्सपोनेंशियल सॉल्यूशंस को ऑप्टिमाइज़ करते समय meet-in-the-middle का उपयोग अक्सर किया जाता है, जो रनिंग टाइम को महत्वपूर्ण रूप से प्रभावित करता है।

Problem

एक सरणी A दी गई है जिसमें n सकारात्मक पूर्णांक और एक संख्या m है। स्थितियों के अनुक्रम का चयन करें बी <उप>1, <कोड>बी<उप>2, ..., <कोड>बी<उप>के (1 <= B1 < B2 < ... < Bk <= n) ऐसा कि   ; \((\sum_{i=1}^{k} A_{B_i}) mod \; m\) अधिकतम था (अर्थात , ताकि अनुक्रम के तत्वों के योग को m संख्या से विभाजित करने का शेष अधिकतम संभव हो)। चयनित अनुक्रम खाली हो सकता है।
\((\sum_{i=1}^{k} A_{B_i}) mod \; m\) के अधिकतम संभावित मान की गणना करें।

इनपुट
पहली पंक्ति में दो पूर्णांक हैं n और m (1 <= n <= 35, 1 <= m <= 109). दूसरी पंक्ति में n पूर्णांक A1, A2< /code शामिल हैं >, ..., An (1 <= Ai <= 109)< बीआर />
छाप
आउटपुट एक संख्या - अधिकतम मान \((\sum_{i=1}^{k} A_{B_i}) mod \; m\)

 
उदाहरण
<टेबल क्लास = "टेबल-एसएम टेबल-बॉर्डर टेबल-स्ट्राइप्ड टेबल-लिस्ट-टेस्ट"> <सिर> <थ वर्ग = "अंक"> # <वें>इनपुट <वें>आउटपुट <शरीर> 1 4 4
5 2 4 1 3 2 3 20
199 41 299 19  
स्पष्टीकरण
पहले उदाहरण में, आप B = {1, 2} चुन सकते हैं। (A1 + A2) mod m = (5 + 2) % 4 = 3
दूसरे उदाहरण में, आप B = {3} चुन सकते हैं।