1. 程式人生 > >動態規劃入門-完全揹包(硬幣兌換問題)

動態規劃入門-完全揹包(硬幣兌換問題)

C - 完全揹包

在一個國家僅有1分,2分,3分硬幣,將錢N兌換成硬幣有很多種兌法。請你程式設計序計算出共有多少種兌法。

Input每行只有一個正整數N,N小於32768。

Output對應每個輸入,輸出兌換方法數。

Sample Input

2934
12553
Sample Output
718831
13137761

Time limit1000 msMemory limit32768 kBOSWindows

思路:動態規劃、遞迴

程式碼如下:

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>

using namespace std;

/*
初始思路定義一個二維陣列num[i][j]。
其中i代表可以兌換成硬幣的種類,
j代表所兌換成的金額,陣列值表示該兌換金額下有多少種兌換方法。
然後利用遞迴將不同兌換金額的兌換方式表達出來。
*/

long long  num[40000];//因為已知3種硬幣,所以陣列由二維轉變成一維。

int main()
{
    int n;
    memset(num,0,sizeof(num));//陣列初始化。注意不可為1.
    num[0]=1;
    for(int i=1;i<=3;i++)
    {
        for(int j=i;j<40000;j++)
            num[j]+=num[j-i];//遞迴思路
    }
    while(~scanf("%d",&n))
    {
        printf("%I64d\n",num[n]);
    }
    return 0;
}

相關推薦

動態規劃入門-完全揹包硬幣兌換問題

C - 完全揹包在一個國家僅有1分,2分,3分硬幣,將錢N兌換成硬幣有很多種兌法。請你程式設計序計算出共有多少種兌法。Input每行只有一個正整數N,N小於32768。Output對應每個輸入,輸出兌換方法數。Sample Input2934 12553Sample Outp

動態規劃完全揹包問題java實現

之前寫了01揹包問題,現在寫完全揹包問題。和01揹包不同的是,完全揹包不限定某種物品的件數,可以裝0,1,2,...,而01揹包只有裝與不裝的區別。但是思考問題的方式還是一樣的,我就其中的最大值。詳細程式碼和註釋見下面程式碼。 package backpack; /* f[i][v]:前i件物

再學動態規劃完全揹包

暴力搜尋 考慮當前index 拿1張,2張,…時候,從index+1開始的最小張數。相加即可: import sys class Solution(object): def get_smal

動態規劃完全揹包問題杭電1114

#include <bits/stdc++.h> using namespace std; #define INF 0x7fffffff #define maxn 10010 int main(){ int dp[maxn],w[maxn],p[maxn]; int e,n,f,i,R,j

動態規劃——盜版無限揹包有個數限制】coin——金幣

題目講解: 用一個數組f[i]表示i的價格是否能達到 f[0]=1,表示價格為0可以到達,賦初值 後用s[i][j]表示到達i的價格用的第j個錢幾個 用無限揹包的方法加一句判斷s[i][j]<j所能用的最大個數 (無限揹包不會的話看程式後的講解) #in

動態規劃入門——多重揹包與單調優化

本文始發於個人公眾號:**TechFlow**,原創不易,求個關注 今天是演算法與資料結構的第14篇文章,也是動態規劃專題的第三篇。 在之前的文章當中,我們介紹了多重揹包的二進位制拆分的解法。在大多數情況下,這種解法已經足夠了,但是如果碰到極端的出題人可能還是會被卡時間。這個時候只能用更加快速的方法,也

經典動態規劃完全揹包問題

讀完本文,你可以去力扣拿下如下題目: [518.零錢兌換II](https://leetcode-cn.com/problems/coin-change-2) **-----------** 零錢兌換 2 是另一種典型揹包問題的變體,我們前文已經講了 [經典動態規劃:0-1 揹包問題](https://

動態規劃-狀壓DP炮兵陣地

我軍 如何 tro 輸入 可見 php 正整數 接下來 一個 P2704 炮兵陣地 題目描述司令部的將軍們打算在NM的網格地圖上部署他們的炮兵部隊。一個NM的地圖由N行M列組成,地圖的每一格可能是山地(用“H” 表示),也可能是平原(用&ldquo

動態規劃演算法學習總結帶案例

【動規演算法學習總結】 首先,遇到動態規劃問題要找到三個重要元素: 1.最優子結構 2.邊界 3.狀態轉移方程 【最優子結構】 通俗來說,就是具有規律性的結果的獲取方式。 如上樓梯問題

動態規劃——DP算法Dynamic Programing

最優 n) 每次 for 利用 列表 自底向上 python bubuko 一、斐波那契數列(遞歸VS動態規劃) 1、斐波那契數列——遞歸實現(python語言)——自頂向下 遞歸調用是非常耗費內存的,程序雖然簡潔可是

01揹包 ,完全揹包,多重揹包 dp (動態規劃入門dp)

dp 動態規劃,確實難啃, 光 最簡單的 揹包問題,就 費老大勁. 思想! 思想! 思想!   類似於遞推, 區域性找 關係.  揹包問題,  就兩種狀態  放還是不放?   其實關於揹包放不放的

動態規劃入門——詳解完全揹包與多重揹包問題

本文始發於個人公眾號:TechFlow,原創不易,求個關注 今天是演算法資料結構專題的第13篇文章,也是動態規劃專題的第二篇。 上一講當中我們一起學習了動態規劃演算法中的零一揹包問題,我們知道了所謂的零一揹包是指每一種物品只有一個,所以它的狀態只有0和1兩種,即拿或者不拿。而今天我們要來討論物品不止有一個的

動態規劃入門

spa turn color and uil ott c++ erro 大數字 2017-09-01 11:29:43 writer:pprp 看sprout臺灣大學acm教學視頻的第一部分: 裏邊涉及到四道小例題 感覺很好就拿來寫了寫: 題意還有代碼說明都在代碼中: 1、

硬幣找零--動態規劃入門

假設有幾種硬幣,如1、3、5,並且數量無限。請找出能夠組成某個數目的找零所使用最少的硬幣數。  #include<iostream> #include<math.h> #define INF 9999999 using namespace std; int m

動態規劃入門-差不多一半借鑑左神

其實從嚴格意義上說,動態規劃,並不是一種演算法,而是一種程式設計技巧,除去無關運算,降低時間複雜度。 舉個例子: 經典例子1-階乘: 遞迴實現:fac(x)=x*fac(x-1),臨界條件為x==0時,返回1。 以x==4時,解空間樹: 遞迴時由上往下延展,解問題時從

Vijos P1133 裝箱問題動態規劃,01揹包,NOIP

noip2001普及組第四題 樣例分析 輸入容積24,6件物品 因為容量最多可達20000,為節省空間,只用一維陣列,用f[j]表示在容積為j時所裝物品所佔用的最大體積 對每一件物品,有放或不放兩種策略,不放,則體積仍為之前的f[j];放,則須留有足夠的空間,並佔用一定的體積,即f[j-v]+v 為了保