題目:有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和可以使用的各...