ठीक है, कोड क्या करता है।
`if (n<0)`
`return 0;`
यदि पर्याप्त कदम शेष नहीं हैं, तो इसे गिनें मत। उदाहरण के लिए, यदि दो चरण शेष हैं, लेकिन उपयोगकर्ता तीन चरणों को लेने की कोशिश कर रहा है, तो यह संभावित संयोजन के रूप में नहीं गिना जाता है।
else if (n==0)
return 1;
शेष चरणों की संख्या उपलब्ध चरणों की संख्या उपयोगकर्ता लेने के लिए कोशिश कर रहा है से मेल खाता है, यह एक संभव संयोजन है। तो, 1 को वापस करें क्योंकि यह एक संभावित संयोजन है और वैध संयोजनों की कुल संख्या में जोड़ा जाना चाहिए।
else if (map[n]>-1)
return map[n];
यहाँ गतिशील प्रोग्रामिंग हिस्सा है। मान लें कि सरणी में सभी मानों का मान -1 था। इसलिए, यदि संख्या -1 से अधिक है, तो इसे पहले ही हल कर लिया गया है, इसलिए इसे हल करने के बजाय चरण संख्या n से संयोजनों की कुल संख्या वापस कर दें।
`map[n] = countDP(n-1, map) + countDP(n-2, map) + countDP(n-3, map);`
return map[n]; }
अंत में, इस हिस्से कोड को हल करती है। संभावित संयोजनों की संख्या उपयोगकर्ता द्वारा प्राप्त किए जा सकने वाले संभावित संयोजनों की संख्या के बराबर होती है यदि वह 1 कदम + संभव संयोजनों की संख्या लेता है, यदि उपयोगकर्ता 2 कदम उठाता है + यदि संभव हो तो उपयोगकर्ता संभवतः संभावित संयोजनों की संख्या ले सकता है तीन कदम
एक उदाहरण, मान लीजिए 5 कदम
एक साधारण रन कैसा दिखेगा देखते हैं:
//The number of solutions from the fifth step
countDp(5) = countDp(4)+countDp(3)+countDp(2);
//Number of solutions from the fourth step
countDP(4) = countDp(3)+countDp(2)+countDp(1);
//Number of solutions from the third step
countDp(3) = countDp(2)+countDp(1)+countDp(0);
//Number of solutions from the second step
countDp(2) = countDp(1)+countDp(0)+countDp(-1);
//Number of solutions from the first step
countDp(1) = countDp(0) + countDp(-1)+countDp(-2);
//Finally, base case
countDp(0) = 1;
countDp(-1)= 0;
countDp(-2)= 0;
countDp(1) = 1+0+0 = 1;
countDp(2) = 1+1+0 = 2; //Dynamic programming: did not have to resolve for countDp(1), instead looked up the value in map[1]
countDp(3) = 2+1+1 = 4; //Dynamic programming, did not have to solve for countDp(1), countDp(2), instead looked up value in map[1] and map[2]
countDp(4) = 4+2+1=7 //Dynamic programming, did not have to solve for CountDp(3),CountDp(2), CountDp(1), just looked them up in map[3],map[2],map[1]
countDp(5)= 2+4+7=13 //Dynamic programming, just used map[4]+map[3]+map[2]
संबंधित: 1. नक्शा है: http://stackoverflow.com/questions/12255193/count-number-of-possible-paths-up-ladder – arshajii
मैं (गुप्त) सवाल के साथ मेरी पूरी कोशिश करेंगे एक 'int' सरणी। 2. इसे इस उदाहरण में बाहरी रूप से परिभाषित नहीं किया जाना चाहिए और इसमें n + 1 तत्व शामिल होना चाहिए 3. नहीं, अगर आप यह उत्तर देना चाहते हैं तो आपको टैग 4 टैग में 'सी' और' सी ++ 'जोड़ना होगा। ... – pstanton