HDOJ 2151

思路: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;
}


posted on 2014-04-30 18:38  wangzhili  阅读(78)  评论(0)    收藏  举报