題目鏈結
xzzf 最近過著吃土的日子,餓的神魂顛倒!突然看到有人在做美食節宣傳,有好多好吃的,但想吃到這些好吃的可以不容易!得答對主辦方出的題。
現在 xzzf 拿到這樣一道題:長度為 n 的 01 字串,且滿足以下條件的方案數有多少種?
1、串中不能有兩個或多個連續的 0。
例如,10、10101、11101 是滿足條件的,而 00、10001、10010 是不滿足條件的。
xzzf 已經餓的神志不清了!顯然沒有力氣回答這道題了,所以,你一定要幫 xzzf 吃上那些好吃的,不然就莫得了!
乙個整數n(1 <= n <= 20)。
滿足題目所述條件的方案數。
輸入 1
輸出 1
輸入 2
輸出 2
說明有 01、10、11 三種滿足條件的方案。
設第 i 個數為 0 的方案數為 f[i][0],第 i 個數為 1 的方案數為 f[i][1],則根據題意可得
f[0][0]=1
f[0][1]=1
f[i][0] = f[i-1][1]
f[i][1] = f[i-1][0] + f[i-1][1]
因此,長度為 n 的字串,可得到的方案數為 f[n-1][0] + f[n-1][1]
#include
using
namespace std;
intmain()
cout<[0
]+f[n-1]
[1]
}
動態規劃的原理
動態規劃與分治法相似,都是通過組合子問題的解來求解原問題。動態規劃通常是用來求解最優化問題 optimization problem 這類問題可以有很多個可行解,每個解都有乙個值,我們希望尋找最優值 最大值或者最小值 的解。我們稱這樣的解為問題的乙個最優解 oneoptimization solut...
動態規劃的思想
動態規劃 dynamic programming 演算法是解決多階段決策過程最優化問題的一種常用方法,難度比較大,技巧性也很強。利用動態規劃演算法,可以優雅而高效地解決很多貪婪演算法或分治演算法不能解決的問題。動態規劃演算法的基本思想是 將待求解的問題分解成若干個相互聯絡的子問題,先求解子問題,然後...
典型的動態規劃
一 問題描述 給定陣列arr,arr中所有值都為整數且不重複,每個值代表一種面值的貨幣,每種面值的貨幣可以使用任意長,再給定乙個整數aim代表要找的錢數,求換錢有多少種方法 二 暴力解法 index代表的是哪種錢 i代表的是有多少張這樣的錢 對i和index分別遍歷,剩下的錢再用process1來分...