1. 程式人生 > >2190 ACM 數學概率論的乘法和加法原則

2190 ACM 數學概率論的乘法和加法原則

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 數學概率論的乘法和加法原則