मुझे गतिशील सिक्का बदलने की समस्या के लिए कोड के अंतिम भाग को समझने में समस्या हो रही है। मैंने नीचे दिया गया कोड शामिल किया है।गतिशील प्रोग्रामिंग - परिवर्तन
मैं अंतिम else
नहीं समझ सकता। क्या मुझे उस बिंदु पर लालची एल्गोरिदम का उपयोग करना चाहिए या क्या मैं तालिका में पहले से मौजूद मानों से उत्तर की गणना कर सकता हूं? मैंने इस समस्या को समझने की कोशिश करने पर कड़ी मेहनत की है और मुझे लगता है कि मैं बहुत करीब हूं। इस विधि को तालिका बनाने और रिकर्सन के बिना बड़ी समस्या को हल करने के लिए तालिका में संग्रहीत परिणामों का उपयोग करके परिवर्तन की निश्चित मात्रा बनाने के लिए आवश्यक न्यूनतम सिक्के मिलते हैं।
public static int minCoins(int[] denom, int targetAmount){
int denomPosition; // Position in denom[] where the first spot
// is the largest coin and includes every coin
// smaller.
int currentAmount; // The Amount of money that needs to be made
// remainingAmount <= initalAmount
int[][] table = new int[denom.length][targetAmount+1];
for(denomPosition = denom.length-1 ; denomPosition >= 0 ; denomPosition--) {
for(currentAmount = 0 ; currentAmount <= targetAmount ; currentAmount++){
if (denomPosition == denom.length-1){
table[denomPosition][currentAmount] =
currentAmount/denom[denomPosition];
}
else if (currentAmount<denom[denomPosition]){
table[denomPosition][currentAmount] =
table[denomPosition+1][currentAmount];
}
else{
table[denomPosition][currentAmount] =
table[denomPosition+1][currentAmount]-
table[denomPosition][denom[denomPosition]]-1;
}
}
}
return table[0][targetAmount];
}
के बजाय 2 (2x6) वापस करने का अनुमान है विधि काम करता है लेकिन समस्या की मेरी समझ में मदद नहीं करता है, क्या आप या किसी और ने कोड की मुख्य पंक्तियों पर टिप्पणी कर सकते हैं, मैं denomPosition और currentAmount के लिए loops के लिए देखता हूं लेकिन उसके बाद यह मेरे मूल कार्यक्रम के समानता खो देता है। आपकी सहायता के लिए धन्यवाद. –
मेरा कार्यान्वयन "मेकिंग चेंज" समस्या पर आधारित है [यहां] (http://people.csail.mit.edu/bdean/6.046/dp/), यह लिंक में वीडियो देखने के बाद स्पष्ट होना चाहिए –