DAG上的動態規劃之硬幣問題

2021-10-05 15:00:18 字數 614 閱讀 4376

有n種硬幣,面值分別為 v1,v2,…,vn。每種都有無限多。給定非負整數s,問可以選用多少個硬幣,使得面值之和恰好為s?輸出硬幣數目的最小值和最大值。 1<=n<=100,0<=s<=10000,1<=vi<=s;

思路:就是可以把終點看為0,輸入的數值為s,就轉化成了定終點的問題,那麼轉移方程其實就是ans=max(ans,dp(s-v[i])+1),也就是選與不選的抉擇,然後根據這個寫乙個遞迴方程,最小值也是類似的。

**如下:

#include

using

namespace std;

int d[

10005];

//用來表示i是否被訪問過,而且用來存貯面值的數目

int v[

105]

;//用來存放硬幣種類

int n;

intdp

(int s)

d[s]=0

;for

(int i=

0;ireturn d[s];}

intmain()

int s;

cin>>s;

cout<<

dp(s)

<}

DAG上的動態規劃 硬幣問題

題目 有n種硬幣,面值分別為v1,v2,vn,每種都有無限多。給定非負整數s,可以選用多少個硬幣,使得面值之和恰好為s?輸出硬幣數目的最小值和最大值!分析 我們把每種面值看作乙個點!表示 還需要湊足的面值 初始狀態為s,目標狀態為0。那麼若當前狀態在i,每使用乙個硬幣j,狀態便轉移到i vj。inc...

DAG上的動態規劃 硬幣問題

問題描述 有n種硬幣,面值分別為v1,v2,v3.vn,每種硬幣有無限多,給定非負整數s,可以選用多少個硬幣,使得面值之和恰好為s?輸出硬幣數目的最小值和最大值,並且輸出各自的選取方案 如果有多種方案,則輸出硬幣編號字典序較小的方案,輸出每種選取方案的面值 分析 本質上市乙個dag上的路徑問題,我們...

DAG上的動態規劃 硬幣問題

題意 有n種硬幣,面值分別為v1,v2,vn,每種都有無限多。給定非負整數s,可以選用多少個硬幣,使得面值之和恰好為s?輸出硬幣數目的最小值和最大值。分析 我們把每種面值看作乙個點!表示 還需要湊足的面值 初始狀態為s,目標狀態為0。那麼若當前狀態在i,每使用乙個硬幣j,狀態便轉移到i vj。inc...