【动态规划】HDOJ 2044 一只小蜜蜂...

这题也可以用斐波那契数列来做。。。

不过我承认我落后了。

没有完全掌握斐波那契数列。

所以只能用DP来做了。。。

 

由题意可知,小蜜蜂只能从某个编号的蜂巢开始爬行,

所能爬向的格子最多只能到编号+2的那个格子。

 

比如从2格子开始爬,第一次爬只能到达3,4,5这两个格子。

 

我们只需要知道后面状态的值,就可以推出前面状态的值。

用自底向上的方法逐步填充DP表。

 

#include <stdio.h> #include <string.h> #define N 60 int main() { int n; int a,b; double DP[N][N]; int i,j,k,l; for (i=0;i<N;i++) for (j=0;j<N;j++) { if (j>i && j<=i+2 && j != N-1) DP[i][j] = 1; else DP[i][j] = 0; } for (i=N-2;i>=2;i--) for (j=i-1;j>=1;j--) for (k=j+1;k<=j+2;k++) { DP[j][i] += DP[k][i]; } while (scanf("%d", &n) != EOF) { while (n--) { scanf("%d%d", &a, &b); printf("%.0lf/n", DP[a][b]); } } return 0; } /* Problem R Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 16 Accepted Submission(s) : 9 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。 其中,蜂房的结构如下所示。 Input 输入数据的第一行是一个整数N,表示测试实例的个数,然后是N 行数据,每行包含两个整数a和b(0<a<b<50)。 Output 对于每个测试实例,请输出蜜蜂从蜂房a爬到蜂房b的可能路线数,每个实例的输出占一行。 Sample Input 2 1 2 3 6 Sample Output 1 3 */

 

你可能感兴趣的:(【动态规划】HDOJ 2044 一只小蜜蜂...)