小雨有一个 n×n 的矩阵,起点在(1,1),终点在(n,n),只能向下或向右走,且每次只能走 1 步。矩阵上每个点都有一个点权ai,j 。
求走到终点的路径有多少不同的点权和。
输入描述:
第一行,输入一个正整数 n 。
接下来 n+1 行,每行 n 个数,表示 aij。
输出描述:
共一行,输出有多少不同的点权和。
参考代码:
#include<bits/stdc++.h>
using namespace std;
int a[10][10];
int book[4000];
void dfs(int x,int y,int n,int sum)
{
if(x<0||y<0||x>n||y>n)
return;
if(x==n&&y==n)
{
book[sum]=1;
return;
}
else
{
dfs(x+1,y,n,sum+a[x][y]);
dfs(x,y+1,n,sum+a[x][y]);
}
}
int main()
{
int n,ans=0;
cin>>n;
memset(book,0,sizeof(book));
memset(a,0,sizeof(a));
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>a[i][j];
dfs(0,0,n-1,a[0][0]);
for(int i=0;i<4000;i++)
if(book[i]==1)
ans++;
cout<<ans<<endl;
return 0;
}