Downhill

 



#include <bits/stdc++.h>
#define M 500

using namespace std;

int n,m,ans;
int A[M+5][M+5],dp[M+5][M+5],vt[M+5][M+5];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};

void input(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>A[i][j];
        }
    }
}
int dfs(int x,int y){
    //cout<<x<<" "<<y<<endl;
    if(x==n&&y==m) return 1;
    if(vt[x][y]) return dp[x][y];
    vt[x][y]=1;
    for(int i=0;i<4;i++){
        int nx=x+dx[i],ny=y+dy[i];
        if(nx>=1&&nx<=n&&ny>=1&&ny<=m){
            if(A[x][y]>A[nx][ny]) dp[x][y]+=dfs(nx,ny);
        }
    }
    return dp[x][y];
}

int main(){
    cin.tie(0);
    ios::sync_with_stdio(0);
    //freopen("in.txt","r",stdin);
    input();
    cout<<dfs(1,1)<<endl;
    return 0;
}








Comments