1 条题解

  • 0
    @ 2024-2-28 15:06:11
    #include <bits/stdc++.h>
    using namespace std;
    int a[30];
    int main()
    {
        int n,i;
        cin>>n;
        a[1]=3;
        a[2]=7;
        for(i=3;i<=n;i++)
            a[i]=2*a[i-1]+a[i-2];
        cout<<a[n]<<endl;
        return 0;
    }
    

    方法二:dfs:

    #include <bits/stdc++.h>
    using namespace std;
    long long n, sum;
    int dx[3] = {0, 0, 1};
    int dy[3] = {-1, 1, 0};
    bool vis[100][100];
    
    int f(int x, int y, int step) {
        if (step >= n) {
            return 1;
        }
        vis[x][y] = true;
        int num = 0;
        for (int i = 0; i < 3; i++) {
            int nx = x + dx[i];
            int ny = y + dy[i];
            if (vis[nx][ny]) continue;
            num += f(nx, ny, step + 1);
        }
        vis[x][y] = false;
        return num;
    }
    
    int main() {
        cin >> n;
        sum = f(25, 25, 0); //在第一象限移动,防止vis越界
        cout << sum;
        return 0;
    }
    

    方法三:DFS,用sum全局累计次数,递归函数没有返回值

    #include <bits/stdc++.h>
    using namespace std;
    long long n, sum;
    int dx[3] = {0, 0, 1};
    int dy[3] = {-1, 1, 0};
    bool vis[100][100];
    
    void f(int x, int y, int step) {
        if (step >= n) {
            sum++;
            return;
        }
        
        for (int i = 0; i < 3; i++) {
            int nx = x + dx[i];
            int ny = y + dy[i];
            if (vis[nx][ny]) continue;
            vis[x][y] = true;
            f(nx, ny, step + 1);
            vis[x][y] = false;
        }
    }
    
    int main() {
        cin >> n;
        f(25, 25, 0); //在第一象限移动,防止vis越界
        cout << sum;
        return 0;
    }
    
    • 1

    信息

    ID
    676
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者