HDU 2151 Worm
2014-03-19 09:04
218 查看
题目是中文,题意就不啰嗦了.
设dp[i][j] 为第i分钟后到达第j颗树的方案数.
dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j + 1] 满足j - 1>= 0 && j + 1 <= N && dp[i - 1][j - 1] != -1 && dp[i - 1][j + 1] != -1
初始化为dp为-1
base case: dp[0][P] = 1
设dp[i][j] 为第i分钟后到达第j颗树的方案数.
dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j + 1] 满足j - 1>= 0 && j + 1 <= N && dp[i - 1][j - 1] != -1 && dp[i - 1][j + 1] != -1
初始化为dp为-1
base case: dp[0][P] = 1
#include <cstdio> #include <memory.h> using namespace std; const int MAX = 101; int dp[MAX][MAX]; int main(int argc, char const *argv[]){ int N, P, M, T; while(~scanf("%d%d%d%d", &N, &P, &M, &T)){ memset(dp, -1, sizeof(dp)); dp[0][P] = 1; for(int i = 0; i < M; ++i){ for(int j = 1; j <= N; ++j){ if(dp[i][j] != -1){ if(j - 1 >= 1){ if(dp[i + 1][j - 1] == -1){ dp[i + 1][j - 1] = dp[i][j]; }else{ dp[i + 1][j - 1] += dp[i][j]; } } if(j + 1 <= N){ if(dp[i + 1][j + 1] == -1){ dp[i + 1][j + 1] = dp[i][j]; }else{ dp[i + 1][j + 1] += dp[i][j]; } } } } } if(dp[M][T] == -1){ printf("0\n"); }else{ printf("%d\n", dp[M][T]); } } return 0; }
相关文章推荐
- HDU 2151 Worm
- hdu 2151 Worm (DP)
- HDU 2151(Worm)动态规划-数塔问题
- HDU 2151 Worm
- HDU 2151 Worm
- hdu 2151 Worm
- hdu2151——Worm
- HDU 2151 Worm (记忆化搜索) 水题
- HDU 2151 Worm(和树塔问题差不多)
- HDU 2151 Worm (动态规划)
- HDU 2151 WORM (动态规划 或 递归)
- HDU 2151--Worm【动态规划】
- hdu-2151 Worm
- HDU 2151:Worm【dp】
- hdu-2151 Worm
- hdu-2151 Worm
- hdu 2151 worm
- HDU 2151 worm
- HDU 2151 Worm
- HDU 2151 Worm