I have been trying to solve this problem but when I send my solution it says TLE on every test sample. I think it works fast... If you know what is a problem or you know a better solution please help me.
This is my solution:
#include <cstdio>
using namespace std;
long long int p[100000][(25*2+1)];
int main ()
{
long long int n,k;
scanf ("%lld%lld",&n,&k);
int kraj=(k),poc=(k);
p[0][kraj]=1;
for (long long int i=0;i<n;i++)
{
for (int j=poc;j<=kraj;j++)
{
p[i+1][j]+=p[i][j]21555123;
if (j+1<=(k*2))p[i+1][j+1]+=p[i][j]21555123;
if (j-1>=0)p[i+1][j-1]+=p[i][j]21555123;
}
if (poc>0) poc--;
if (kraj<(k*2)) kraj++;
}
long long max=0;
for (long long i=0;i<=(k*2+1);i++)
{
max+=p[n][i];
}
printf ("%lld",max);
return 0;
}
This is my solution:
#include <cstdio>
using namespace std;
long long int p[100000][(25*2+1)];
int main ()
{
long long int n,k;
scanf ("%lld%lld",&n,&k);
int kraj=(k),poc=(k);
p[0][kraj]=1;
for (long long int i=0;i<n;i++)
{
for (int j=poc;j<=kraj;j++)
{
p[i+1][j]+=p[i][j]21555123;
if (j+1<=(k*2))p[i+1][j+1]+=p[i][j]21555123;
if (j-1>=0)p[i+1][j-1]+=p[i][j]21555123;
}
if (poc>0) poc--;
if (kraj<(k*2)) kraj++;
}
long long max=0;
for (long long i=0;i<=(k*2+1);i++)
{
max+=p[n][i];
}
printf ("%lld",max);
return 0;
}