这个dp比较简单,以时间为阶段,最优化和无后效性表现比较明显
状态: f[i][j] 表示第i秒钟在第j棵树上的方法数
状态转移: f[i][j] = f[i-1][j-1]+f[i-1][j+1]
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define MAXN 1<<7
int f[MAXN][MAXN];
int main(int argc, char const *argv[])
{
#ifndef ONLINE_JUDGE
freopen("test.in", "r", stdin);
#endif
int n, p, m, t;
while( ~scanf("%d %d %d %d", &n, &p, &m, &t) ) {
memset(f, 0, sizeof(f)); f[0][p] = 1;
for(int i = 1; i <= m; i ++) {
for(int j = 1; j <= n; j ++) {
f[i][j] = f[i-1][j-1]+f[i-1][j+1];
}
}
printf("%d\n", f[m][t]);
}
return 0;
}
hdu_2151 worm ( 简单DP )
最新推荐文章于 2020-05-07 18:37:27 发布