Pagini recente » Cod sursa (job #2985527) | Cod sursa (job #2934078) | Cod sursa (job #1721508) | Cod sursa (job #1843013) | Cod sursa (job #126106)
Cod sursa(job #126106)
#include <cstdio>
#include <string>
short dp[2001][3][1001];
inline void add(short a[], short b[])
{
int i, t=0;
for(i=1; i<=a[0] || i<=b[0] || t; ++i, t/=10)
a[i]=(t+=a[i]+b[i])%10;
a[0]=i-1;
}
inline void afis(short a[])
{
for(int i=a[0]; i ; --i)printf("%d", a[i]);
printf("\n");
}
int main()
{
//freopen("vecini.in","r",stdin);
int n;
//scanf("%d", &n);
n=2000;
if(n==0){ printf("0\n");return 0;}
if(n==1){ printf("1\n"); return 0;}
dp[2][0][0]=1;
dp[2][0][1]=2;
dp[2][1][0]=1;
dp[2][1][1]=3;
dp[2][2][0]=1;
dp[2][2][1]=2;
int i, j;
for(i=3;i<=n;++i)
for(j=0;j<3;++j)
{
if(j-1>=0) add(dp[i][j], dp[i-1][j-1]);
add(dp[i][j], dp[i-1][j]);
if(j+1<=2) add(dp[i][j], dp[i-1][j+1]);
}
add(dp[n][0], dp[n][1]);
add(dp[n][0], dp[n][2]);
afis(dp[n][0]);
return 0;
}