package main import ( "fmt" "math" ) // Fungsi untuk menghitung jumlah minimum koin dan banyak kombinasi koin func minCoinsAndCombinations(amount int, coins []int) (int, int) { // Array untuk menyimpan jumlah minimum koin untuk setiap nilai minCoins := make([]int, amount+1) for i := range minCoins { minCoins[i] = math.MaxInt32 } minCoins[0] = 0 // Array untuk menyimpan jumlah kombinasi untuk setiap nilai dp := make([]int, amount+1) dp[0] = 1 for _, coin := range coins { for i := coin; i <= amount; i++ { // Perbarui minCoins untuk nilai saat ini if minCoins[i-coin]+1 < minCoins[i] { minCoins[i] = minCoins[i-coin] + 1 } // Perbarui jumlah kombinasi untuk nilai saat ini dp[i] += dp[i-coin] } } return minCoins[amount], dp[amount] } func main() { // Nominal yang ingin dibentuk amount := 146 // Pecahan koin yang tersedia coins := []int{1, 5, 10, 25, 50, 100} // Mendapatkan hasil minKoin, kombinasi := minCoinsAndCombinations(amount, coins) fmt.Printf("Jumlah minimum koin untuk membentuk %d: %d\n", amount, minKoin) fmt.Printf("Banyak kombinasi koin untuk membentuk %d: %d\n", amount, kombinasi) }