典型的记忆化递归问题。

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

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

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

#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. ELMAH--Using HTTP Modules and Handlers to Create Pluggable ASP.NET Components 77 out of 90 rated th

    MSDN===http://msdn.microsoft.com/en-us/library/aa479332.aspx PROJECT==https://code.google.com/p/elma ...

  2. VirtualBox 安装虚拟机

  3. Windows上编译libtiff

    将libtiff 4.0.3解压到[工作目录]/tiff/tiff-4.0.3 对于Release,编辑tiff/tiff-4.0.3里面的nmake.opt如下选项,去掉注释: JPEG_SUPPO ...

  4. git跟踪远程分支,查看本地分支追踪和远程分支的关系

    跟踪远程分支 如果用git push指令时,当前分支没有跟踪远程分支(没有和远程分支建立联系),那么就会git就会报错 There is no tracking information for the ...

  5. Android组件之自定义ContentProvider

    Android的数据存储有五种方式Shared Preferences.网络存储.文件存储.外储存储.SQLite,一般这些存储都只是在单独的一个应用程序之中达到一个数据的共享,有时候我们需要操作其他 ...

  6. 理解JavaScript模仿块作用域

    1.JS没有块作用域 在C和Java中,一对大括号{}决定一个作用域,比如for循环.在js中,变量可以在函数任何一处定义,并且忽略重复定义.变量初始化之前使用,值永远是undefined. func ...

  7. Python 批量修改图片格式和尺寸

    公司的一个项目要求把所有4096x4096的图片全部转化成2048x2048的图片,这种批量转换图片大小的软件网上很多,我的同事原来使用的美图看看的批量转换,但是稍微有点麻烦,每次还需要指定要转换的图 ...

  8. c语言基础,\r, \n, \r\n

    Enumeration (or enum) in C Enumeration (or enum) is a user defined data type in C. It is mainly used ...

  9. dobbo 服务配置详解(解决超时重试问题)

    <!-- reference method -->     <dubbo:reference interface="com.xx.XxxService">  ...

  10. java核心技术36讲

    https://time.geekbang.org/column/intro/82?utm_source=website&utm_medium=infoq&utm_campaign=8 ...