思路:DP水,dp[i][j]表示第i分钟到第j棵树的种数,dp[i][j] = dp[i-1][j-1] + dp[i-1][j+1],再注意下边界就行。
#include<iostream>
#include<cstdio>
#include<cstring>
#define MAX 105
using namespace std;
int dp[MAX][MAX];
int main(){
int n, t, m, p;
/* freopen("in.c", "r", stdin); */
while(~scanf("%d%d%d%d", &n, &p, &m, &t)){
memset(dp, 0, sizeof(dp));
dp[1][p-1] = dp[1][p+1] = 1;
for(int i = 2;i <= m;i ++){
for(int j = 1;j <= n;j ++){
if(j > 1 && j < n) dp[i][j] += dp[i-1][j+1] + dp[i-1][j-1];
else if(j == 1) dp[i][j] += dp[i-1][j+1];
else dp[i][j] += dp[i-1][j-1];
}
}
printf("%d\n", dp[m][t]);
}
return 0;
}