题目大意:

给一个n x n 的矩阵,求从1,1到n,n有多少中不同的点权和。每次只能向下或右走一步

思路:

dfs的板子题

代码实现

#include "iostream"
#include "map"
using namespace std;
int a[20][20], b[20][20];
map<int, bool> num;
int n;
int sum = 0;
pair<int, int> q[50 * 50], dir[2] = {{1, 0}, {0, 1} };

void dfs(int i, int j){
    if(i == n){
        if(j == n){
            num[sum] = 1;
            return;
        }
    }

    for(int k = 0; k < 2; k ++){
        int x = i + dir[k].first, y = j + dir[k].second;

        if(i <= n && j <= n && b[x][y] == 0){
            b[x][y] = 1;
            sum += a[x][y];
            dfs(x, y);
            sum -= a[x][y];
            b[x][y] = 0;
        }
    }
}
int main(){

    cin >> n;
    for(int i = 1; i <= n; i ++){
        for(int j = 1; j <= n; j ++){
            cin >> a[i][j];
        }
    }
    dfs(1, 1);
    cout << num.size() << endl;

    return 0;
}