Tôi đang gặp khó khăn trong việc tìm ra phần mã cuối cùng của mình cho một vấn đề thay đổi xu động động. Tôi đã bao gồm mã bên dưới.Thay đổi lập trình động
Tôi không thể tìm ra số else
cuối cùng. Tôi có nên sử dụng thuật toán tham lam tại thời điểm đó hay tôi có thể tính toán câu trả lời từ các giá trị đã có trong bảng? Tôi đã làm việc chăm chỉ để cố gắng hiểu vấn đề này và tôi nghĩ rằng tôi khá thân thiết. Phương pháp tìm số tiền tối thiểu cần thiết để tạo ra một số thay đổi nhất định bằng cách tạo một bảng và sử dụng các kết quả được lưu trữ trong bảng để giải quyết vấn đề lớn hơn mà không sử dụng đệ quy.
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];
}
phương pháp hoạt động nhưng không giúp tôi hiểu vấn đề có thể bạn hoặc người khác nhận xét về các dòng chính của mã tôi thấy cho các vòng cho denomPosition và currentAmount nhưng sau đó nó mất tất cả giống với chương trình gốc của tôi. Cảm ơn bạn đã giúp đỡ. –
Việc triển khai của tôi dựa trên vấn đề "Thực hiện thay đổi" được giải thích trong [đây] (http://people.csail.mit.edu/bdean/6.046/dp/), cần phải rõ ràng sau khi xem video trong liên kết –