動態規劃例題

2022-09-28 03:42:10 字數 1231 閱讀 9261

題目描述

有一條很長的數軸,一開始你在0的位置。接下來你要走n步,第i步你可以往右走ai或者bi。

問n步之後,0到m的每個位置,能不能走到?

輸入格式

第一行,兩個整數n,m。

接下來n行,每行兩個整數ai,bi。

輸出格式

一行,一共m+1個數,每個數都是0或1表示能否走到,數字之間不用空格隔開。

樣例輸入

3 10

1 22 6

3 3

樣例輸出
00000011001
思路

輸出要求是走到最後一步之後, 可以走到的所有位置,如果最後一步走到了位置i,那麼倒數第二步就需要走到i-a或者i-b,所以就考慮動態規劃,用布林陣列來表示是否能走到i的位置,而每次轉移就是考慮i-a或者i-b能不能走到,依次從後往前推到,這裡的思路類似於走樓梯

動態規劃**

#includeusing namespace std;

const int n = 100010;

int n, m;

bool st[110][n];

int main()

}for ( int i = 0; i <= m; i ++ )

return 0;

}

題目描述

樓梯有 n 階,上樓可以一步上一階,也可以一步上二階。

但你不能連續三步都走兩階,計算走到第n階共有多少種不同的走法。

輸入格式

一行,乙個數字,表示n。

輸出格式

輸出走樓梯的方式總數。

輸入樣例

6
輸出樣例
12
思路

n最大100,dfs時間複雜度為o(2^100),鐵定tle(親測)

動態規劃思路:二維陣列來記錄,一維記錄當前所在位置,二維記錄前面已經有了連續幾次2步,題目限制原因,二維只需要考慮0,1,2,所以陣列開dp[n][3],因為要用的i-2,所以千萬要記得在迴圈之前把1和2處理出來,然後進行迴圈即可

**

#includeusing namespace std;

long long f[60][3];

int main()

cout << f[n][0] + f[n][1] + f[n][2] << endl;

return 0;

}

《動態規劃》 ACM 動態規劃例題詳解

描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 圖1 圖1給出了乙個數字三角形。從三角形的頂部到底部有很多條不同的路徑。對於每條路徑,把路徑上面的數加起來可以得到乙個和,你的任務就是找到最大的和。注意 路徑上的每一步只能從乙個數走到下一層上和它最近的左邊的那個數或者右邊的那個數。輸...

動態規劃及其動態規劃經典例題

動態規劃是最重要 最經典的演算法之一,學好動態規劃對我們十分重要,掌握動態規劃對解決某些問題會起到事半功倍的效果。特點 可以把原始問題劃分為一系列子問題 求解每個子問題僅一次,並將其結果儲存到乙個表中,以後用到時直接訪問,不重複計算,節省時間。自底向上地計算 適用範圍 原問題可以分為多個相關子問題,...

動態規劃典型例題

題目描述 一天,ykc在學校閒的無聊,於是決定上街買點吃的,ykc很懶,本來就不是很像逛街,於是找來了czl幫他買,這裡應該有滑稽,而czl也不願為ykc買東西吃,但是ykc很強勢,非讓他去買,呢沒辦法了,然而czl還有很多事要做,沒呢麼多時間幫ykc,而這條小吃街又很長,有n家店,n有50000這...