典型的记忆化递归问题。

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

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

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

#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 <= 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;
}

POJ 1579 Function Run Fun 记忆化递归的更多相关文章

  1. poj 1579 Function Run Fun(记忆化搜索+dp)

    题目链接:http://poj.org/problem?id=1579 思路分析:题目给出递归公式,使用动态规划的记忆搜索即可解决. 代码如下: #include <stdio.h> #i ...

  2. POJ 1579 Function Run Fun 【记忆化搜索入门】

    题目传送门:http://poj.org/problem?id=1579 Function Run Fun Time Limit: 1000MS   Memory Limit: 10000K Tota ...

  3. poj 1579 Function Run Fun 【记忆化递归】

    <题目链接> 题目大意: 给出一些递归式,直接套用这些递归式计算. 解题分析: 递归式已经由题目明确说明了,但是无脑递归铁定超时,所以此时,我们需要加上记忆化,对于那些已经算过的,就没有必 ...

  4. poj 1579(动态规划初探之记忆化搜索)

    Function Run Fun Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 17843   Accepted: 9112 ...

  5. POJ 1579 Function Run Fun

    简单动态规划,详细代码网上有!

  6. php实现变态跳台阶(记忆化递归)

    php实现变态跳台阶(记忆化递归) 一.总结 1.本题思路(分类讨论思路,注意初始值和边界值):第一步如果1,那剩下的就是jumpFloorII($number-1)(下面jumpFloorII以j表 ...

  7. php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习)

    php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习) 一.总结 1.递归不优化的话,30层开外就有点吃力了 2.php因为定义变量的时候不用定义变量类型,所以数组里面的类型也是p ...

  8. 多校第五场 归并排序+暴力矩阵乘+模拟+java大数&amp;记忆化递归

    HDU 4911 Inversion 考点:归并排序 思路:这题呀比赛的时候忘了知道能够用归并排序算出逆序数,可是忘了归并排序的实质了.然后不会做-- 由于看到题上说是相邻的两个数才干交换的时候.感觉 ...

  9. poj 1661 Help Jimmy(记忆化搜索)

    题目链接:http://poj.org/problem?id=1661 一道还可以的记忆化搜索题,主要是要想到如何设dp,记忆化搜索是避免递归过程中的重复求值,所以要得到dp必须知道如何递归 由于这是 ...

随机推荐

  1. 优化中的subgradient方法

    哎.刚刚submit上paper比較心虚啊.无心学习.还是好好码码文字吧. subgradient介绍 subgradient中文名叫次梯度.和梯度一样,全然能够多放梯度使用.至于为什么叫子梯度,是由 ...

  2. 【spring boot】【log4jdbc】使用log4jdbc打印mybatis的sql和Jpa的sql语句运行情况

    在spring boot 中使用mybatis 想看到sql语句的运行情况. 虽然按照 之前说的配置了 logging.level.你的mapper包位置 = debug 但是依旧没有起作用. 所以采 ...

  3. SQL游标、函数的使用方法

         游标的的使用有日常的开发和维护的过程不使用的并不多,但是碰到一些棘手的问题的时候,游标时常是个非常好的帮手,下面就说下游标的使用方法,方法自己以后查阅,和加深一些印象,下面以一个存储过程为例 ...

  4. SQL:查询学习笔记

    SQL 查询命令 SELECT 语法 SELECT "column_name" FROM "table_name"; 返回一列 SELECT Username ...

  5. 《Windows核心编程》第八章——用户模式下的线程同步

    下面起了两个线程,每个对一个全局变量加500次,不假思索进行回答,会认为最后这个全局变量的值会是1000,然而事实并不是这样: #include<iostream> #include &l ...

  6. [转]C++之运算符重载(2)

    上一节主要讲解了C++里运算符重载函数,在看了单目运算符(++)重载的示例后,也许有些朋友会问这样的问题.++自增运算符在C或C++中既可以放在操作数之前,也可以放在操作数之后,但是前置和后置的作用又 ...

  7. Python 基础学习 总结篇

    Python 基础学习总结 先附上所有的章节: Python学习(一)安装.环境配置及IDE推荐 Python学习(二)Python 简介 Python学习(三)流程控制 Python学习(四)数据结 ...

  8. Ubuntu 12.04 安装配置 Apache2

    Apache2安装 1 我们使用root账户进行安装,首先切换到root账户,输入命令: sudo su 2 安装 Apache2 apt-get install apache2 在浏览器输入你服务器 ...

  9. Android权限管理PermissionsDispatcher2.3.2使用+原生6.0权限使用

    PermissionsDispatcher2.3.2使用 Android6.0权限官网https://developer.android.com/about/versions/marshmallow/ ...

  10. SQL中以count或sum为条件的查询方式

    在开发时,我们经常会遇到以“累计(count)”或是“累加(sum)”为条件的查询.比如user_num表: id user num 1 a 3 2 a 4 3 b 5 4 b 7   例1:查询出现 ...