Codeup動態規劃專題總結 放蘋果

2021-09-26 14:48:21 字數 1030 閱讀 7477

時間限制: 1 sec  記憶體限制: 32 mb

提交: 87  解決: 70

[提交][狀態][討論版][命題人:外部匯入]

把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?(用k表示)5,1,1和1,5,1 是同一種分法。

第一行是測試資料的數目t(0 <= t <= 20)。以下每行均包含二個整數m和n,以空格分開。1<=m,n<=10。

對輸入的每組資料m和n,用一行輸出相應的k。

2

6 37 2

7

4

解題分析:

設f(m,n) 為m個蘋果,n個盤子的放法數目,則先對n作討論,

當n>m:必定有n-m個盤子永遠空著,去掉它們對擺放蘋果方法數目不產生影響。即if(n>m) f(m,n) = f(m,m)  

當n<=m:不同的放法可以分成兩類:

1、有至少乙個盤子空著,即相當於f(m,n) = f(m,n-1);  

2、所有盤子都有蘋果,相當於可以從每個盤子中拿掉乙個蘋果,不影響不同放法的數目,即f(m,n) = f(m-n,n).

而總的放蘋果的放法數目等於兩者的和,即 f(m,n) =f(m,n-1)+f(m-n,n) 

遞迴出口條件說明:

當n=1時,所有蘋果都必須放在乙個盤子裡,所以返回1;

當沒有蘋果可放時,定義為1種放法;

遞迴的兩條路,第一條n會逐漸減少,終會到達出口n==1; 

第二條m會逐漸減少,因為n>m時,我們會return f(m,m) 所以終會到達出口m==0

dfs:

#includeusing namespace std;

int f(int m,int n)

int main()

for(int i=0;i<=n;i++)

for(int i=1;i<=m;i++)

}cout<} }

return 0;

}

Codeup動態規劃專題總結 最大子矩陣

時間限制 1 sec 記憶體限制 32 mb 提交 168 解決 65 提交 狀態 討論版 命題人 外部匯入 已知矩陣的大小定義為矩陣中所有元素的和。給定乙個矩陣,你的任務是找到最大的非空 大小至少是1 1 子矩陣。比如,如下4 4的矩陣 0 2 7 0 9 2 6 2 4 1 4 1 1 8 0 ...

專題三 動態規劃總結

在這篇部落格裡我寫一下做了乙個月的dp之後對dp的粗淺認識,並附上一些學習資源。如果乙個問題的最優解包含其子問題的最優解,我們就稱此問題具有最優子結構。摘自 演算法導論 也就是說,具有最優子結構的問題的最優解一定是由其各個子問題的最優解組合而成的。我覺得dp最關鍵的就是找出狀態轉移方程,即找出問題的...

專題三 總結動態規劃

動態規劃總結 一 解釋 解決多階段策略問題的一種方法,運用最優性原理,排除重複計算,用空間換時間的演算法。二 適用的題目型別 1.問題具有多階段的決策 2.每個階段對應乙個狀態 狀態變數 3.每個階段有乙個決策 不同的決策導致下乙個階段不同的狀態 4.每個階段的最優解可以遞迴地歸結為下乙個階段各個可...