1. 程式人生 > >動態規劃 需要最少的硬幣數

動態規劃 需要最少的硬幣數

假設給你 總額為11元,硬幣種類為 1,3,5.

求最小的硬幣數

遞推公式為:d(i)=min{ d(i-vj)+1 }  vj為面額 1,3,或者5

這個基本是最簡單的動態規劃演算法,程式碼如下:

public class Dpcoins {

	public static void main(String[] args) {
		int coins[]= {1,3,5};
		int money=11;
		int dp[]=new int[12];
		dp[0]=0;
		
		for(int i=1;i<=money;i++) {
			dp[i]=i;
			
		}
		
		for(int i=1;i<=money;i++) {
			for(int j=0;j<coins.length;j++) {
				if(i>coins[j]&&(dp[i-coins[j]]+1)<dp[i]) {
					dp[i]=dp[i-coins[j]]+1;
				}
				
				
			}
		}
		System.out.println(dp[11]);
		
		

	}

}


相關推薦

動態規劃 需要最少硬幣

假設給你 總額為11元,硬幣種類為 1,3,5. 求最小的硬幣數 遞推公式為:d(i)=min{ d(i-vj)+1 }  vj為面額 1,3,或者5 這個基本是最簡單的動態規劃演算法,程式碼如下:p

動態規劃最少硬幣換取目標錢【0-1揹包問題】

/*********************************** 最少硬幣換取目標錢數【0-1揹包問題】 ***************************************/ /***************************** 思路: 1.建立

動態規劃最少硬幣找零問題、01揹包問題、完全揹包問題

題目一:01揹包問題 一個揹包總容量為V,現在有N個物品,第i個 物品體積為weight[i],價值為value[i],現在往揹包裡面裝東西,怎麼裝能使揹包的內物品價值最大? 題目二:完全揹包問題 一個揹包總容量為V,現在有N個物品,第i個 物品體積為weight[i],價值為value[i],每

動態規劃解決最少硬幣湊成m元錢

You are given coins of different denominations and a total amount of money amount. Write a function to compute the fewest number of coins that you need t

53. Maximum Subarray(動態規劃 求最大子組)

lse pan int scrip mat rip pos 動態規劃 script Find the contiguous subarray within an array (containing at least one number) which has

動態規劃_二項式系

wid XML absolut 算法 選擇 add font relative main 動態規劃之二項式系數 @(算法學習) (nk)=n!(n?k)!k! 計算二項式系數的問題在於,系數本身在int表示範圍內,但是計算用到的分子是階乘,這個是很大的數,會導致溢出的問題。

動態規劃_連續子組的最大和

但是 == 向量 常常 ret pub num 負數 測試 題目描述 HZ偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了:在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是

BZOJ5125 小Q的書架(決策單調性+動態規劃+分治+樹狀組)

zoj esp 基礎 out 決策單調 註意 spa void get   設f[i][j]為前i個劃成j段的最小代價,枚舉上個劃分點轉移。容易想到這個dp有決策單調性,感性證明一下比較顯然。如果用單調棧維護決策就不太能快速的求出逆序對個數了,改為使用分治,移動端點時樹狀數

【習題詳解】動態規劃DP:硬幣遊戲 蛋糕

動態規劃DP硬幣蛋糕塔 硬幣 題目描述 農夫約翰的奶牛喜歡玩硬幣遊戲,因此他發明了一種稱為“Xoinc”的兩人硬幣遊戲。 初始時,一個有N(5 <= N <= 2,000)枚硬幣的堆疊放在地

動態規劃(3)格子取問題

問題描述: 有n*n個格子,每個格子裡有正數或者0,從最左上角往右下角走。一共走2次,(即從左上角走到右下角走兩次),把所有經過的格子裡的數加起來,求總和的最大值。如果兩次經過同一個格子,則最

遞迴與動態規劃---換錢的方法

【問題】   給定陣列arr,arr中所有的值都為整數且不重複。每個值代表一種面值的貨幣,每種貨幣有無數張,再給定一個整數aim代表要找的錢數,求換錢的方法有多少種。 【基本思路】 這道題的經典之處在於它可以體現暴力遞迴、記憶搜尋、動態規劃之間的關係,並可

貪心演算法最少硬幣

package com.web; import java.util.Scanner; /** * Created by. */ public class Permutation { public static void main(String[] args) {

動態規劃】之硬幣找零問題(難度:1星)

#include <stdio.h> /** * 原題: * 假設有幾種硬幣,如1塊、3塊、5塊,並且數量無限。 * 請找出能夠組成某個數目的找零所使用最少的硬幣數。 */ #def

動態規劃】 方格取

題目描述 給定一個N*M的矩陣,記錄左上角為(1,1),右下角為(N,M),現在從(1,1)開始取數,每次只能向下或向右移動一個單位,最終到達(N,M),我們把路徑上所有的數相乘,記為C。使C的結果最大已經不能滿足我們了,現在我們想讓C末尾的零最少。 Ps.11000末尾有

動態規劃之K好(藍橋杯ALGO-3)

import java.util.Scanner; public class Demo01 { private int[][] matrix(int k, int l){ int[][] m

動態規劃演算法求解硬幣找零問題

硬幣找零問題描述:現存在一堆面值為 V1、V2、V3 … 個單位的硬幣,問最少需要多少個硬幣才能找出總值為 T 個單位的零錢?假設這一堆面值分別為 1、2、5、21、25 元,需要找出總值 T 為 63 元的零錢。 很明顯,只要拿出 3 個 21 元的硬幣就湊夠了 63

動態規劃入門之硬幣問題

動態規劃演算法通常基於一個遞推公式及一個或多個初始狀態。 當前子問題的解將由上一次子問題的解推出。使用動態規劃來解題只需要多項式時間複雜度, 因此它比回溯法、暴力法等要快許多。動態規劃也是面試筆試題中的一個考查重點,當閱讀一個題目並且開始嘗試解決它時,首先看一下它的限制。

動態規劃 硬幣問題,求最大、最小可以組成一個錢

核心思想:         在我們從 1 元開始依次找零時,可以嘗試一下當前要找零的面值(這裡指 1 元)是否能夠被分解成另一個已求解的面值的找零需要的硬幣個數再加上這一堆硬幣中的某個面值之和,如果這樣分解之後最終的硬幣數是最少的,

最少硬幣問題(動態規劃遞推式)

最少硬幣問題 時間限制(普通/Java) : 1000 MS/ 3000 MS          執行記憶體限制 : 65536 KByte總提交 : 247            測試