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

本文共 1172 字,大约阅读时间需要 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;}

posted on
2017-04-22 12:53 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/mthoutai/p/6747514.html

你可能感兴趣的文章
Java基础 【Arrays 类的使用】
查看>>
MPI 环境搭建问题-运行程序闪退
查看>>
(数据科学学习手札05)Python与R数据读入存出方式的总结与比较
查看>>
面向对象课程 - 寒假第三次作业 - C++计算器项目初始部分
查看>>
Java私塾的一些基础练习题(一)
查看>>
Shell 07 项目案例
查看>>
Dapper基础用法
查看>>
一步步学习SPD2010--第九章节--使用可重用工作流和工作流表单(1)--创建和使用可重用工作流...
查看>>
客户端存储
查看>>
实验五 burpsuite重放攻击实验
查看>>
POJ 3624 Charm Bracelet 0-1背包
查看>>
React 使用browserHistory项目访问404问题
查看>>
div动态消失的动画效果
查看>>
Fragment:关于Avoid non-default constructors in fragments的错误
查看>>
[Contest]2017 ACM/ICPC Asia Regional Shenyang Online(01 03 07 09 10 11待补)
查看>>
CentOS 6.5系统安装配置图解教程
查看>>
Atitit 基于dom的游戏引擎
查看>>
Atitit 硬件 软件 的开源工作 差异对比
查看>>
requestAnimationFrame
查看>>
HATEOAS
查看>>