अधिकतम संप्रदायों के सिक्के को एक दूसरे के बाद रखा जाता है। आपको सिक्कों को एक-एक करके चुनना होगा (पहले और आखिरी को छोड़कर) जब तक कि केवल 2 सिक्के (पहले और आखिरी) शेष न हों। प्रत्येक बार जब आप सिक्का चुनते हैं तो आप इसे बाएं और दाएं सिक्के मूल्यों को गुणा करते हैं। समस्या इस तरह के क्रम में सिक्कों को चुनना है ताकि सभी गुणाओं का योग अधिकतम हो।विभिन्न संप्रदायों के सिक्के एक के बाद एक रखा जाता है, योग
माना कि सिक्के रखा जाता है 1, 6, 7, के रूप में 4
सिक्के लेने के लिए 2 तरीके हैं::
सबसे पहले जिस तरह से: पहले 6 लेने, यह 1 में परिणाम होगा उदाहरण के लिए * 7 = 7 और उसके बाद 7 लेने, इस परिणाम होगा में 1 * 4 = 4, इसलिए कुल 7 + 4 =
दूसरा तरीका होगा: पहले 7 लेने, इस 6 * 4 में परिणाम होगा = 24 और फिर 6 चुनें, इसका परिणाम 1 * 4 = 4 होगा, इसलिए कुल 2 होगा 4 + 4 =
जैसा कि 28 सबसे बड़ा है, यह हमारा जवाब है।
मुझे सभी संभावित मामलों के माध्यम से पुनरावर्ती रूप से ट्रैवर्सिंग और उनके आउटपुट मूल्यों की तुलना करके सही उत्तर मिल सकता है लेकिन यह समाधान घातीय समय के रूप में बहुत अक्षम है। कृपया बताएं कि इस समस्या को और अधिक कुशलता से कैसे हल किया जा सकता है।
संपादित करें: पुनरावर्ती समाधान
int remove (int a [], int end, int pos) {
int tmp = a[pos];
for (int i = pos + 1; i <= end; i++) {
a[i - 1] = a[i];
} a[end] = 0;
return tmp;
}
int * insert (int a [], int end, int pos, int val) {
for (int i = end; i >= pos; i--) {
a[i + 1] = a[i];
} a[pos] = val;
return a;
}
/* a: input array, {1, 7, 6, 4}
end: array last index, 3 for above case
*/
int getMaxSum (int a [], int end, int sum = 0) {
if (end == 1) {
return sum;
}
int maxSum = 0;
for (int i = 1; i < end; i++) {
auto mult = a[i - 1]*a[i + 1];
auto val = remove(a, end, i);
auto tmp = getMaxSum (a, end - 1, sum + mult);
if (tmp > maxSum)
maxSum = tmp;
insert(a, end - 1, i, val);
}
return maxSum;
}
दिखाएं कि आपको क्या पुनरावृत्ति मिली है। यह गतिशील प्रोग्रामिंग * (यदि यह काम करता है) में उपयोगी हो सकता है * समाधान – MBo
गतिशील प्रोग्रामिंग के साथ हल करने योग्य होना चाहिए क्योंकि प्रत्येक उपरागर तक पहुंचने के लिए कई पथ हैं। – user3386109
सबसे छोटी संख्या खोजें (अंतिम और पहले अनदेखा करें) और इसे हटा दें। यह इष्टतम समाधान दे सकता है। – Kajal