給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 -1。
你可以認為每種硬幣的數量是無限的。
題目鏈結
題目解析:
1.動態規劃首先需要知道問題的最後一步是什麼,我們是要求達到總金額x時最少的硬幣總數
2.知道最後一步我們就要推導問題的子問題,假設我們有硬幣x1,x2,x4,那麼在求達到總金額amount的時候的硬幣數量,我們可以將最後一步分解為 amount-x1/zmount-x2/amount-x3 +1
3.再將子問題不斷分解,繼續向前推進就可以得到轉移方程,假設當前硬幣數量為dp[i],硬幣金額有1,3, 5種,那麼轉移方程為dp[i]=fmin(dp[amount-1],dp[amount-3],dp[amount-5])+1;
給定正整數 n,找到若干個完全平方數(比如 1, 4, 9, 16, …)使得它們的和等於 n。你需要讓組成和的完全平方數的個數最少。
給你乙個整數 n ,返回和為 n 的完全平方數的 最少數量 。
完全平方數 是乙個整數,其值等於另乙個整數的平方;換句話說,其值等於乙個整數自乘的積。例如,1、4、9 和 16 都是完全平方數,而 3 和 11 不是。
題目鏈結
題目解析:
這題認真一看,會發現其實是和上題的思路是一樣的
求構成正整數n,需要多少個數的平方和。
1.找到最後一步,分解為子問題
設構成n的數為x1,x2,x3…xn, 並且這些數都會滿足條件x2]…dp[n-xn2]
2.將子問題再進行分解,推導出轉移方程
至此,就將構成所需要的數字個數分解為了上面的子問題 dp[n-x1^2] 或者是 dp[n-x22]…dp[n-xn2],我們將子問題進行比較,找到所需構成數字,最少的那乙個子問題,加上一就是構成n所需要的數字
再將子問題同樣進行遞推分解,得到轉移方程dp[i]=fmin(dp[i-x1],dp[i-x2],…,dp[i-x3])+1;
在乙個由 『0』 和 『1』 組成的二維矩陣內,找到只包含 『1』 的最大正方形,並返回其面積。
題目鏈結
1;i)//從1開始,是因為上和左邊界為右下角的正方形最大邊長就是自己}}
int max=0;
for(
int i=
0;ireturn max*max;
int
maximalsquare
(char
** matrix,
int matrixsize,
int* matrixcolsize)
for(
int i=
0;i}int max=0;
for(
int i=
0;ireturn max*max;
}
由於我們只需要用到上方,和左方的正方形,因此只需要兩個一維陣列即可
int
maximalsquare
(char
** matrix,
int matrixsize,
int* matrixcolsize)
else
//為偶
}else
//matrix為零時}}
return
(max*max)
;}
回溯題目集合 貳
給定乙個無重複元素的陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的數字可以無限制重複被選取。說明 所有數字 包括 target 都是正整數。解集不能包含重複的組合。題目鏈結 解析 1.需要傳遞...
動態規劃題目特性
1 此類問題是乙個由多決策產生最優值的最優化問題.決策 是指在問題可以按時間順序分成若干相互聯絡的階段,每乙個階段都需要做出決策,產生最優值,整個求解過程中的決策是乙個決策序列.最優化問題 眾所周知在資訊學之中有四大類問題 判定性問題 構造性問題 計數問題和最優化問題。其中最優化問題遇到的較多,而最...
動態規劃 經典題目
made by syx time 2010年7月17日 13 58 47 矩陣連乘 最長公共子串行 最長公共子串行 include char x 8 char y 7 int b 9 8 int c 9 8 void printarray int i1,int j1,int i2,int j2,in...