典型的记忆化递归问题. 这类问题的记忆主要是利用数组记忆.那么已经计算过的值就能够直接返回.不须要进一步递归了. 注意:下标越界.递归顺序不能错,及时推断是否已经计算过值了,不要多递归. 或者直接使用动态规划法填好表也是能够的. #include <stdio.h> #include <limits.h> const int MAX_N = 21; int W[MAX_N][MAX_N][MAX_N]; int getValue(int a, int b, int c) { if
A OpenJ_Bailian 1088 滑雪 B OpenJ_Bailian 1579 Function Run Fun C HDU 1078 FatMouse and Cheese D POJ 3280 Cheapest Palindrome E OpenJ_Bailian 1976 A Mini Locomotive F OpenJ_Bailian 2111 Millenium Leapcow G OpenJ_Bailian 1141 B
1.直接用递归函数计算状态转移方程,效率十分低下,可以考虑用递推方法,其实就是“正着推导,逆着计算” #include<iostream> #include<algorithm> using namespace std; #define maxn 1000+5 int n; int a[maxn][maxn]; int d[maxn][maxn]; int main(){ for(;cin>>n && n;){ memset(d,,sizeof(d));
http://acm.hdu.edu.cn/showproblem.php?pid=3555 Bomb Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 7316 Accepted Submission(s): 2551 Problem Description The counter-terrorists found a time