1196:踩方格


时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

有一个方格矩阵,矩阵边界在无穷远处。我们做如下假设:

a、每走一步时,只能从当前方格移动一格,走到某个相邻的方格上;

b、走过的格子立即塌陷无法再走第二次;

c、只能向北、东、西三个方向走;

请问:如果允许在方格矩阵上走n步,共有多少种不同的方案。2种走法只要有一步不一样,即被认为是不同的方案。

【输入】

允许在方格上行走的步数n(n≤20)。

【输出】

计算出的方案数量。

【输入样例】

2

【输出样例】

7

解析:递推,对于当前步骤(i),前一步(i-1)东西走的,都有两种走法,向北走的有3种走法,上一步向北的走法数量刚好是大上一步(i-2)(因为大上一步每种走法都可以向北走一步),所以当前步骤的走法=上一步(i-1)*2+大上一步(i-2)详见代码:

#include <bits/stdc++.h>
using namespace std;
long long a[25];
int n;
int main() {
    cin >> n;
    a[1] = 3;
    a[2] = 7;
    for(int i = 3; i <= n; i++) {
        a[i] = a[i - 1] * 2 + a[i - 2];
    }
    cout << a[n];
    return 0;
}

 另一种递推:第一步向东西走的是2步(东西各一步),向北走的一步,第二步开始向北走的是上一步东西和北的和,向东西走的是上一步向北的2倍+向东西的一倍(原来向东的不能向西,向西的不能向东),详见代码:

#include <bits/stdc++.h>
using namespace std;
long long a[25];//向北步数
long long b[25];//向东西的步数
int n;
int main() {
    cin >> n;
    a[1] = 1;
    b[1] = 2;
    for(int i = 2; i <= n; i++) {
        a[i] = a[i - 1]  + b[i - 1];
        b[i] = 2 * a[i - 1] + b[i - 1];
    }
    cout << a[n] + b[n];
    return 0;
}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐