動態規劃題目集合 貳

2021-10-22 23:15:17 字數 2226 閱讀 3047

給定不同面額的硬幣 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...