思路:
我本想dfs
看了个牛的思路,dp
思路简单,代码干净
先写状态转移方程
dp[i][j][k]=(dp[i][j][k]+dp[i-1][j][k/2])上一步是店
dp[i][j][k]=(dp[i][j][k]+dp[i][j-1][k+1])上一步是花
代码:
#include<iostream>
using namespace std;
int n,m;
const long long mod=1000000007;
int dp[105][105][105];
int main(){
cin>>n>>m;
dp[0][0][2]=1;
for(int i=0;i<=n;i++){//店
for(int j=0;j<=m;j++){//花
for(int k=0;k<=m;k++){//酒的量不可能比花的总量多
if(i>0&&k>0&&k%2==0) dp[i][j][k]=(dp[i][j][k]+dp[i-1][j][k/2])%mod;
if(j>0) dp[i][j][k]=(dp[i][j][k]+dp[i][j-1][k+1])%mod;
}
}
}
cout<<dp[n][m][0];
return 0;
}