硬幣問題(DP)

2021-07-11 19:43:40 字數 644 閱讀 2301

題目:有n種硬幣,面值分別為v1,v2,...vn,每種都有無限多。給定非負整數s,可以選用多少個硬幣,使得面值之和恰好為s?輸出硬幣數目的最小值!

狀態:d[i] 表示i 元最少要換多少個硬幣,那麼我們便要求d[s}的值;

狀態如何轉移:i元換零錢v[j](i>=v[j]),後狀態變為 d[i-v[j]];

狀態選取:選d[j]的值最小的,這樣d[s]才會最小,所以d[i]=min;

int s,n=3;

const int inf=1<<7-1;

/* 遞迴法 */

int dp(int s) //ans=-1表示未計算;

void print_ans(int s) }

int main()

; int s,n=3;

int max_coin[5000],min_coin[5000];

const int inf=1<<7-1;

int dp(int s)

if(maxv[i]< maxv[i-v[j]]+1)

}printf("%d %d\n",maxv[s],minv[s]);

}print_ans(int* d,int s)

return 0;

}

DP 硬幣問題

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

dp 最少硬幣問題

問題描述 設有n 種不同面值的硬幣,各硬幣的面值存於陣列t 1 n 中。現要用這些面值的硬幣 來找錢。可以使用的各種面值的硬幣個數存於陣列coins 1 n 中。對任意錢數0 m 20001,設計乙個用最少硬幣找錢m的方法。程式設計任務 對於給定的1 n 10,硬幣面值陣列t和可以使用的各種面值的硬...

最少硬幣問題 dp思想

最少硬幣問題 description 設有n種不同面值的硬幣,各硬幣的面值存於陣列t 1 n 中。現要用這些面值的硬幣來找錢。可以使用的各種面值的硬幣個數存於陣列coins 1 n 中。對任意錢數0 m 20001,設計乙個用最少硬幣找錢m的方法。對於給定的1 n 10,硬幣面值陣列t和可以使用的各...