[Dynamic Programming]Example 3.1 Recursion Programming - About the Stairs

来源:互联网 发布:海康威视的设备域名 编辑:程序博客网 时间:2024/06/01 09:27

//国际大学生程序设计竞赛例题解(三)

//动态规划

//Page104


Version 1.0

#include <iostream>#include <cstdio>using namespace std;int f(int n){    int ret;    if(n == 0) ret = 1;    else if(n == 1) ret = 1;    else    {        ret = f(n - 1) + f(n - 2);    }    return ret;}int main(){    int n;    cin >> n;    cout << f(n) << endl;    return 0;}


Version 2.0

#include <iostream>#include <cstdio>using namespace std;int f(int n){    int ret;    if(n == 0 || n == 1) ret = 1;    else    {        int temp1 = f(n - 1);        int temp2 = f(n - 2);        ret = temp1 + temp2;    }    return ret;}int main(){     int n;     cin >> n;     cout << f(20) << endl;     return 0;}


Version 3.0

#include <iostream>#include <cstdio>using namespace std;int n;int ret;void f(){    if(n == 0 || n == 1)    {        ret = 1;        return;    }    int temp;    n--;    //f(n - 1)    f();    temp = ret;    n--;    //f(n - 2)    f();    temp += ret;    //recover n    n += 2;    ret = temp;}int main(){    cin >> n;    f();    cout << ret << endl;}


动态规划:

空间换时间[O(N)]

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

空间换时间[O(1)]

#include <iostream>#include <cstdio>using namespace std;const int MAXSIZE = 100;int data[MAXSIZE];int main(){    data[0] = 1;    data[1] = 1;    for(int i = 2; i < MAXSIZE; i++)    {        data[i] = data[i - 1] + data[i - 2];    }    int n;    cin >> n;    cout << data[n] << endl;    return 0;}



原创粉丝点击