इस समस्या में, हमें एक संख्या N दी गई है। हमारा कार्य C++ में एक प्रोग्राम बनाना है ताकि विभाजित करने या जैसा है वैसा मानने के विकल्प के साथ अधिकतम मान ढूंढा जा सके।
समस्या विवरण
अधिकतम ढूंढने के लिए, हम कोई भी दो मान ले सकते हैं, या तो मान को जैसा है वैसा ले सकते हैं या हम विभाजित करके अधिकतम मान प्राप्त कर सकते हैं। मान को F(N/2) + F(N/3) + F(N/4) + F(N/5) के रूप में निकाला जा सकता है।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट: N = 8
आउटपुट: 9
व्याख्या
F(8) = F(8/2) + F(8/3) + F(8/4) + F(8/5) = F(4) + F(2) + F(2) + F(1) = 4 + 2 + 2 + 1 = 9
समाधान दृष्टिकोण
विचार केवल विभाजन के मान के लिए उसी फ़ंक्शन को कई बार कॉल करना है। इसके लिए हमने डायनामिक प्रोग्रामिंग की अवधारणा का उपयोग किया है और 0 से N तक F(i) के मानों को हल करने के लिए एक सरणी बनाई है, ताकि समाधान खोजने के लिए उनका पुनरावर्तन किया जा सके।
उदाहरण
#include <iostream> using namespace std; int calcMaximumValue(int N) { int F[N + 1]; int divVal = 0; F[0] = 0; F[1] = 1; for (int i = 2; i <= N; i++) { divVal = ( F[i / 2] + F[i / 3] + F[i / 4] + F[i / 5] ); if(divVal > i) F[i] = divVal; else F[i] = i; } return F[N]; } int main() { int N = 8; cout<<"विभाजित करने या जैसा है वैसा मानने के विकल्प के साथ अधिकतम मान = "<<calcMaximumValue(N); return 0; }
आउटपुट
विभाजित करने या जैसा है वैसा मानने के विकल्प के साथ अधिकतम मान = 9