博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 1579 Function Run Fun 记忆化递归
阅读量:7071 次
发布时间:2019-06-28

本文共 1046 字,大约阅读时间需要 3 分钟。

典型的记忆化递归问题。

这类问题的记忆主要是利用数组记忆。那么已经计算过的值就能够直接返回。不须要进一步递归了。

注意:下标越界。递归顺序不能错,及时推断是否已经计算过值了,不要多递归。

或者直接使用动态规划法填好表也是能够的。

#include 
#include
const int MAX_N = 21;int W[MAX_N][MAX_N][MAX_N];int getValue(int a, int b, int c){ if (a <= 0 || b <= 0 || c <= 0) return W[0][0][0] = 1; if (a >= MAX_N || b >= MAX_N || c >= MAX_N) return getValue(MAX_N-1, MAX_N-1, MAX_N-1); if (W[a][b][c]) return W[a][b][c]; if (a < b && b < c) { W[a][b-1][c-1] = getValue(a, b-1, c-1); W[a][b][c-1] = getValue(a, b, c-1); W[a][b-1][c] = getValue(a, b-1, c); return W[a][b][c] = W[a][b][c-1] + W[a][b-1][c-1] - W[a][b-1][c]; } W[a-1][b-1][c-1] = getValue(a-1, b-1, c-1); W[a-1][b-1][c] = getValue(a-1, b-1, c); W[a-1][b][c-1] = getValue(a-1, b, c-1); W[a-1][b][c] = getValue(a-1, b, c); return W[a][b][c] = W[a-1][b][c] + W[a-1][b-1][c] + W[a-1][b][c-1] - W[a-1][b-1][c-1];}int main(){ int a, b, c; while (~scanf("%d %d %d", &a, &b, &c)&& !(a == -1 && b == -1 && c == -1)) { printf("w(%d, %d, %d) = %d\n", a, b, c, getValue(a, b, c)); } return 0;}

转载地址:http://awkml.baihongyu.com/

你可能感兴趣的文章
java中json数据生成和解析(复杂对象演示)
查看>>
二分 三分搜索
查看>>
C#中反射type记录
查看>>
View在测量时的MeasureSpec由什么决定?
查看>>
HDU3067 小t的游戏
查看>>
JDK源码 ArrayList
查看>>
程序员面试大揭秘——应聘微软、亚马逊、谷歌、苹果等IT公司你都要做什么准备?...
查看>>
【转】如何理解云计算?很简单,就像吃货想吃披萨了
查看>>
ECharts测量图,功率图
查看>>
个人总结作业
查看>>
C++的预处理(Preprocess)
查看>>
仿网易菜单 实现侧滑 SlidingMenu
查看>>
延时显示的三种实现方式
查看>>
LeetCode算法题-Missing Number(Java实现-四种解法)
查看>>
Quick Cocos2dx 与 EnterFrame事件
查看>>
一个用ASP生成html的新方法
查看>>
Selenium学习之==>Switch与SelectApi接口详解
查看>>
Js判断是否是直接进入本页面的
查看>>
GOlang eclipse install
查看>>
Centos7 hostname重启失效
查看>>