#include <iostream>
#include <cstdio>
using namespace std;
const int P=1000000007;
const int N=2005;
int f[N][N][2];
int n,K,ans;
inline void update(int &x,int y){(x+=y)%=P;}
int main()
{
//freopen("solitaire.in","r",stdin),freopen("solitaire.out","w",stdout);
scanf("%d%d",&n,&K);
f[n+1][0][0]=1;
for (int i=n+1;i>=2;--i)
{
for (int j=n-1;j>=0;--j) update(f[i][j][0],f[i][j+1][0]);
for (int j=0;j<=n;++j)
for (int k=0;k<2;++k)
if (f[i][j][k])
{
update(f[i-1][j+1][1],f[i][j][k]);
update(f[i-1][j][0],f[i][j][k]);
}
}
ans=f[1][n-K][0];
for (int i=1;i<=n-K-1;++i) (ans<<=1)%=P;
printf("%d\n",ans);
//fclose(stdin),fclose(stdout);
return 0;
}
./Main.cpp: In function ‘int main()’:
./Main.cpp:17:21: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d",&n,&K);
^