2190 ACM 數學概率論的乘法和加法原則
阿新 • • 發佈:2018-09-16
include iostream ace 遞推 尋找 ext 但是 情況下 ++
題目:http://acm.hdu.edu.cn/showproblem.php?pid=2190
思路:明顯我們要尋找 邊長為n和邊長為n-1,n-2,n-3·····的規律,這樣得出一個遞推公式就能方便的得出f(n)(邊長為n的值)
由於只有兩種類型的地板磚,2*2 1*1,所以最後加入的一行,可能是1*1的磚塊,也可能是2*2磚塊的一部分,所以 f(n)就和f(n-1)和f(2)有關
接下來推導:
由數學概論論可知:
兩種個情況,不同情況之間用加號
同一情況下,的下一步操作的方法數 之間用乘法
1 第n行放的是1*1的磚塊
所以只需要在f(n-1)的基礎上放即可,且1*1磚塊的方法只有一種
2 第n行放的是2*2磚塊的一部分
所以在f(n-2)的基礎上放即可,本來有三種的,但是舍棄1*1的情況,因為和上述情況重復,2*2放左邊或右邊,兩種情況
結論:f(n)=f(n-1)*1+f(n-2)*2
代碼:
#include<iostream> #include<cstdio> using namespace std; int main() { int c; int sch[32]; sch[1]=1; sch[2]=3; sch[3]=5; for(int i=4;i<31;i++) sch[i]=sch[i-1]+sch[i-2]*2; cin>>c; while(c--) { int n; cin>>n; cout<<sch[n]<<endl; } return 0; }
2190 ACM 數學概率論的乘法和加法原則