Find the number of monotonic lattice paths along the edges of a grid with n × n square cells, which do not pass above the diagonal. A monotonic path is one which starts in the lower left corner, finishes in the upper right corner, and consists entirely of edges pointing rightwards or upwards.
Code:
Code:
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
ll findMonotonicLatticePaths(int n)
{
// simple formula is Catalan number
// 2nCn / (n+1)
ll**table;
table=new ll*[n+1];
for(int i=0;i<=n;i++)
table[i]=new ll[n+1];
// table[i][j] denotes the number of shortest paths to reach (0,n) from (n,0)
table[n][0]=0;
table[n][1]=1;
for(int j=1;j<=n;j++)
{
table[n][j]=1; // base case
for(int i=n-1;i+j>=n;i--)
{
int x=0,y=0;
if(j-1>=0 && i+j-1>=n)
x=table[i][j-1];
if(i+1<=n && i+1+j>=n)
y=table[i+1][j];
table[i][j]=x+y;
}
}
return table[0][n];
}
int main()
{
int n;
cin>>n;
cout<<findMonotonicLatticePaths(n)<<endl;
}
No comments:
Post a Comment