动态规划之找零问题详解
找零问题:需找零金额为W,硬币面值有(d1, d2, d3,…,dm),最少需要多少枚硬币。
问题:需找零金额为8,硬币面值有(1, 3, 2, 5),最少需要多少枚硬币。
设F(j)表示总金额为j时最少的零钱数,F(0) = 0,W表示找零金额,有零钱一堆{d1, d2, d3,…,dm}。同样根据之前的经验,要达到为j,那么必然是j – di(1 <= i <= m)面值的硬币数再加1个di面值的硬币,当然j >= di,即F(j) = F(j - di) + 1, j >= di。
Java
1 package com.algorithm.dynamicprogramming; 2 3 import java.util.Arrays; 4 5 /** 6 * 找零问题 7 * Created by yulinfeng on 7/5/17. 8 */ 9 public class Money {10 public static void main(String[] args) {11 int[] money = {1, 3, 2, 5};12 int sum = 8;13 int count = money(money, sum);14 System.out.println(count);15 }16 17 private static int money(int[] money, int sum) {18 int[] count = new int[sum + 1];19 count[0] = 0;20 for (int j = 1; j < sum + 1; j++) { //总金额数,1,2,3,……,sum21 int minCoins = j;22 for (int i = 0; i < money.length; i++) { //遍历硬币的面值23 if (j - money[i] >= 0) {24 int temp = count[j - money[i]] + 1; //当前所需硬币数25 if (temp < minCoins) {26 minCoins = temp;27 }28 }29 }30 31 count[j] = minCoins;32 }33 System.out.println(Arrays.toString(count));34 return count[sum];35 }36 }
Python3
1 #coding=utf-8 2 def charge_making(money, num): 3 ''' 4 找零问题 5 ''' 6 count = [0] * (num + 1) 7 count[0] = 0 8 for j in range(1, num + 1): 9 minCoins = j10 for i in range(len(money)):11 if j - money[i] >= 0:12 temp = count[j - money[i]] + 113 if temp < minCoins:14 minCoins = temp15 16 count[j] = minCoins17 18 return count[num]19 20 money = [1, 3, 2, 5]21 num = 822 count = charge_making(money, num)23 print(count)
tag
Atas ialah kandungan terperinci 动态规划之找零问题详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Masalah penilaian kesan pengelompokan dalam algoritma pengelompokan memerlukan contoh kod khusus Pengelompokan ialah kaedah pembelajaran tanpa pengawasan yang mengelompokkan sampel yang serupa ke dalam satu kategori dengan mengelompokkan data. Dalam algoritma pengelompokan, cara menilai kesan pengelompokan adalah isu penting. Artikel ini akan memperkenalkan beberapa penunjuk penilaian kesan pengelompokan yang biasa digunakan dan memberikan contoh kod yang sepadan. 1. Indeks penilaian kesan pengelompokan Pekali Siluet Pekali siluet menilai kesan pengelompokan dengan mengira kehampiran sampel dan tahap pemisahan daripada kelompok lain.

Selesaikan masalah "error:redefinitionofclass'ClassName'" dalam kod C++ Dalam pengaturcaraan C++, kita sering menghadapi pelbagai ralat kompilasi. Salah satu ralat biasa ialah "error:redefinitionofclass 'ClassName'" (ralat definisi semula kelas 'ClassName'). Ralat ini biasanya berlaku apabila kelas yang sama ditakrifkan beberapa kali. Artikel ini akan

Dikenali dengan prestasi yang berkuasa dan ciri serba boleh, iPhone tidak terlepas daripada cegukan atau kesukaran teknikal sekali-sekala, ciri biasa di kalangan peranti elektronik yang kompleks. Mengalami masalah iPhone boleh mengecewakan, tetapi biasanya penggera tidak diperlukan. Dalam panduan komprehensif ini, kami menyasarkan untuk menyahmistifikasi beberapa cabaran yang paling biasa dihadapi yang berkaitan dengan penggunaan iPhone. Pendekatan langkah demi langkah kami direka untuk membantu anda menyelesaikan isu lazim ini, menyediakan penyelesaian praktikal dan petua penyelesaian masalah untuk mengembalikan peralatan anda dalam keadaan berfungsi terbaik. Sama ada anda menghadapi masalah atau isu yang lebih kompleks, artikel ini boleh membantu anda menyelesaikannya dengan berkesan. Petua Penyelesaian Masalah Umum Sebelum menyelidiki langkah penyelesaian masalah khusus, berikut adalah beberapa yang berguna

Analisis algoritma PHP: Bagaimana untuk menggunakan algoritma pengaturcaraan dinamik untuk menyelesaikan masalah substring palindrom terpanjang? Pengaturcaraan Dinamik (Pengaturcaraan Dinamik) ialah idea algoritma yang biasa digunakan yang boleh menyelesaikan banyak masalah kompleks. Salah satunya ialah masalah substring palindrom terpanjang, iaitu mencari panjang substring palindrom terpanjang dalam rentetan. Artikel ini akan memperkenalkan cara menggunakan PHP untuk menulis algoritma pengaturcaraan dinamik untuk menyelesaikan masalah ini, dan memberikan contoh kod khusus. Mari kita tentukan subrentetan palindrom terpanjang dahulu. Rentetan palindrom merujuk kepada rentetan yang membaca sama ke hadapan dan ke belakang, dan rentetan palindrom

Cara menggunakan C# untuk menulis algoritma pengaturcaraan dinamik Ringkasan: Pengaturcaraan dinamik ialah algoritma biasa untuk menyelesaikan masalah pengoptimuman dan sesuai untuk pelbagai senario. Artikel ini akan memperkenalkan cara menggunakan C# untuk menulis algoritma pengaturcaraan dinamik dan memberikan contoh kod khusus. 1. Apakah algoritma pengaturcaraan dinamik (DP) ialah idea algoritma yang digunakan untuk menyelesaikan masalah dengan submasalah yang bertindih dan sifat substruktur yang optimum. Pengaturcaraan dinamik menguraikan masalah kepada beberapa sub-masalah untuk diselesaikan, dan merekodkan penyelesaian kepada setiap sub-masalah.

Cara menggunakan algoritma masalah knapsack dalam C++ Masalah knapsack adalah salah satu masalah klasik dalam algoritma komputer Ia melibatkan cara memilih beberapa item untuk dimasukkan ke dalam knapsack di bawah kapasiti ransel yang diberikan untuk memaksimumkan jumlah nilai item. Artikel ini akan memperkenalkan secara terperinci cara menggunakan algoritma pengaturcaraan dinamik dalam C++ untuk menyelesaikan masalah ransel, dan memberikan contoh kod khusus. Pertama, kita perlu menentukan input dan output masalah ransel. Input termasuk tatasusunan berat wt[] item, tatasusunan nilai val[] item dan kapasiti W beg galas. Outputnya ialah objek yang dipilih

Untuk menyelesaikan masalah yang jQuery.val() tidak boleh digunakan, contoh kod khusus diperlukan Untuk pembangun bahagian hadapan, menggunakan jQuery ialah salah satu operasi biasa. Antaranya, menggunakan kaedah .val() untuk mendapatkan atau menetapkan nilai elemen borang adalah operasi yang sangat biasa. Walau bagaimanapun, dalam beberapa kes tertentu, masalah tidak dapat menggunakan kaedah .val() mungkin timbul. Artikel ini akan memperkenalkan beberapa situasi dan penyelesaian biasa, serta memberikan contoh kod khusus. Penerangan Masalah Apabila menggunakan jQuery untuk membangunkan halaman hadapan, kadangkala anda akan menghadapi

Masalah pemerolehan label dalam pembelajaran yang diselia dengan lemah memerlukan contoh kod khusus Pengenalan: Pembelajaran diselia dengan lemah ialah kaedah pembelajaran mesin yang menggunakan label yang lemah untuk latihan. Berbeza daripada pembelajaran tradisional yang diselia, pembelajaran yang diselia dengan lemah hanya perlu menggunakan lebih sedikit label untuk melatih model, berbanding setiap sampel perlu mempunyai label yang tepat. Walau bagaimanapun, dalam pembelajaran yang diselia dengan lemah, cara mendapatkan maklumat berguna dengan tepat daripada label yang lemah adalah isu utama. Artikel ini akan memperkenalkan masalah pemerolehan label dalam pembelajaran yang diselia dengan lemah dan memberikan contoh kod khusus. Pengenalan kepada masalah pemerolehan label dalam pembelajaran yang diselia dengan lemah:
