HDOJ 2151
2014-04-30 18:38
148 查看
思路: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; }