Hdu遞推求解專題練習(For Beginner)

來源:互聯網
上載者:User

在Hdu上是下面幾題

Hdu 2041 超級樓梯

下面是解題報告(因為有的題有點水,和貼發)

Hdu 2044 一隻小蜜蜂...

     分析:數一下前幾種可能的走法,不難發現這是個斐波那契數。但是題目給定任意兩個數a和b(a<b),計算a到b的走法。因為是從a到b的走法,所以從1到a的走法我們不用討論,同理從1到b的走法我們也不用討論。這樣,就可以將a看做1,將b看做(b-a+1),轉化為求從1到(b-a+1)的走法。

o(╯□╰)o:只知道是斐波那契數,但是布吉島斐波那契數數的增長很快,很容易爆int。

下面是代碼:

/*Hdu 2044 一隻小蜜蜂...   遞推 斐波那契數   數組開long long,斐波那契數增長很快*/#include<iostream>using namespace std;const int maxn = 60;long long f[maxn];int t,a,b;int main(){    f[1] = 1;    f[2] = 1;    for(int i = 3; i <= maxn; i++)   f[i] = f[i-1] + f[i-2];    cin>>t;    while(t--)    {        cin>>a>>b;        cout<<f[b-a+1]<<endl;    }    return 0;}

Hdu 2045 不容易系列之(3)—— LELE的RPG難題

  分析:

  

下面是代碼:

#include<iostream>using namespace std;const int maxn = 55;long long F[maxn];int n;int main(){    F[1] = 3;    F[2] = 6;    F[3] = 6;    for(int i = 4; i <= maxn; i++) F[i] = F[i-1] + 2 * F[i-2];    while(cin>>n)    cout<<F[n]<<endl;    return 0;}

Hdu 2046 骨牌鋪方路

  分析:前一排只有一種方法,所以只用討論F[n-1];前二排也只有一種方法,那麼討論F[n-2]。所以遞推式:F[n] = F[n-1] + F[n-2]。這也是斐波那契數。

下面是代碼:

#include<iostream>using namespace std;const int maxn = 55;long long f[maxn];int n;int main(){    f[0] = 1;    f[1] = 1;    for(int i = 2; i <= maxn; i++) f[i] = f[i-1] + f[i-2];    while(cin>>n) cout<<f[n]<<endl;    return 0;}

Hdu 2047 阿牛的EOF牛肉串

  分析:設F[n]可以由兩個部分得到,第(n-1)個為O,第(n-1)個為O。

               F[n] = 2 * (為O) + 3 *(不為O)

下面是代碼:

#include<iostream>using namespace std;const int maxn = 45;long long A[maxn];long long B[maxn];int n;int main(){    A[1] = 1;    B[1] = 2;    for(int i = 2; i <= maxn; i++)    {        A[i] = B[i-1];        B[i] = 2 * (A[i-1] +B[i-1]);    }    while(cin>>n) cout<<A[n]+B[n]<<endl;    return 0;}


Hdu 2048 神,上帝和老天爺

    分析:全錯位排列。當n小於8時,用遞推求解;當n大於8時,基本上機率不變。不過犯二了,記錯變形後的遞推公式了,囧!

下面是代碼“:

/*Hdu 2048 神,上帝和老天爺   全錯位排列*/#include<cstdio>#include<cmath>using namespace std;const int maxn = 50;double D[maxn];int n;int main(){    D[1] = 0;    D[2] = 1;    int t;    scanf("%d",&t);    while(t--)    {        double f = 1;        scanf("%d",&n);        if(n <= 10)        {            for(int i = 2; i <= n; i++)            {                f = f * i;                double flag;                if(i%2 == 0) flag = +1;                else flag = -1;                D[i] = i * D[i-1] + flag;            }            int ans = floor((D[n]/f+0.00005)*10000);            printf("%.2lf%\n",(double)ans/100);        }        else            printf("36.79%10\n");    }    return 0;}

Hdu 2049 不容易系列之(4)——考新郎

      分析:這到題和上一題相似,都是錯位排列。只不過上一題是全錯位排列,只一題是部分錯位排列。但是原理沒有什麼不一樣的。

下面是代碼:

#include<iostream>using namespace std;const int maxn = 25;long long F[maxn],C[maxn];int t,n,m;int main(){    F[1] = 0;    F[2] = 1;    C[0] = 1;    for(int i = 3; i <= maxn; i++) F[i] = (i-1) * (F[i-1] + F[i-2]);    cin>>t;    while(t--)    {        cin>>n>>m;        for(int i = 1; i <= n; i++) C[i] = C[i-1]*(n-i+1)/i;        cout<<C[m]*F[m]<<endl;    }    return 0;}

Hdu 2050 折線分割平面

  分析:首先搞清楚直線分割平面問題,然後再根據直線問題解決折線問題。

下面是代碼:

#include<iostream>using namespace std;int n,t;int main(){    cin>>t;    while(t--)    {        cin>>n;        cout<<1 + (2*n)*(2*n+1)/2 - 2*n<<endl;    }    return 0;}

Hdu 2041 超級樓梯

    很簡單的遞推題,直接代碼

#include<iostream>using namespace std;const int maxn = 50;int d[maxn];int t,n;void print(){    d[1] = 1;    d[2] = 1;    for(int i = 3; i < maxn; i++)    {        d[i] = d[i-1] + d[i-2];    }}int main(){    cin>>t;    print();    while(t--)    {        cin>>n;        cout<<d[n]<<endl;    }    return 0;}

 

好了,前前後後花了不少時間才刷完這幾道遞推入門題。都是很基礎的一些問題。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.