记忆化搜索太强了,加快dfs,介于动归和dfs之间,就是把dfs改成int再用数组存一下,存过的直接读
#include<bits/stdc++.h>
#define inf 100011
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
int n,m;
ll k=2;
ll an;
int dp[103][103][105];
int dfs(int n,int m,int k)
{
if(n==0&&m==1&&k==1)
{
return 1;
}
if(k<0||n<0||m<0) return 0;
if(k>m) return 0;
int w=0,e=0;
if(dp[n][m][k]!=-1)
{
return dp[n][m][k];
}
for(int i=0;i<2;i++)
{
if(!i)
{
w=dfs(n-1,m,k*2)%1000000007;
}else
{
if(k>0)e=dfs(n,m-1,k-1)%1000000007;
else e=0;
}
}
return dp[n][m][k]=(w+e)%1000000007;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
memset(dp,-1,sizeof(dp));
cin>>n>>m;
dfs(n,m,k);
if(dp[n][m][2]!=-1)
cout<<dp[n][m][2];
else cout<<0;
return 0;
}