Function Run Fun

Description

We all love recursion! Don’t we?

Consider a three-parameter recursive function w(a, b, c):

if a <= 0 or b <= 0 or c <= 0, then w(a, b, c) returns:
1

if a > 20 or b > 20 or c > 20, then w(a, b, c) returns:
w(20, 20, 20)

if a < b and b < c, then w(a, b, c) returns:
w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c)

otherwise it returns:
w(a-1, b, c) + w(a-1, b-1, c) + w(a-1, b, c-1) - w(a-1, b-1, c-1)

This is an easy function to implement. The problem is, if implemented directly, for moderate values of a, b and c (for example, a = 15, b = 15, c = 15), the program takes hours to run because of the massive recursion.

Input

The input for your program will be a series of integer triples, one per line, until the end-of-file flag of -1 -1 -1. Using the above technique, you are to calculate w(a, b, c) efficiently and print the result.

Output

Print the value for w(a,b,c) for each triple.

Sample Input

1 1 1
2 2 2
10 4 6
50 50 50
-1 7 18
-1 -1 -1

Sample Output

w(1, 1, 1) = 2
w(2, 2, 2) = 4
w(10, 4, 6) = 523
w(50, 50, 50) = 1048576
w(-1, 7, 18) = 1

Source

Pacific Northwest 1999

问题链接:POJ1579 HDU1331 HDU1579 ZOJ1168 Function Run Fun
问题描述:(略)
问题分析
    这是一个递归函数计算问题,最怕的是重复计算。
    该题的绝大多数解法是打表法,然而递归函数计算可以采用记忆化递归进行计算。打表法则需要事先把所有的可能都算出来;记忆化递归也打表,但只计算必要的项,有可能计算量更少一些。
程序说明:(略)
参考链接:(略)
题记:(略)

AC的C语言程序如下:

/* POJ1579 HDU1331 HDU1579 ZOJ1168 Function Run Fun */#include <stdio.h>
#include <string.h>#define N 20
int f[N + 1][N + 1][N + 1];int w(int a, int b, int c)
{if(a <= 0 || b <= 0 || c <= 0) return 1;else if(a > N || b > N || c > N) return w(N, N, N);else if(f[a][b][c]) return f[a][b][c];else if(a < b && b < c) return f[a][b][c] = w(a, b, c - 1) + w(a, b - 1, c - 1) - w(a, b - 1, c);else return f[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(void)
{memset(f, 0, sizeof(f));int a, b, c;while(scanf("%d%d%d", &a, &b, &c) != EOF) {if(a == -1 && b == -1 && c == -1) return 0;printf("w(%d, %d, %d) = %d\n", a, b, c, w(a,b,c));}return 0;
}

POJ1579 HDU1331 HDU1579 ZOJ1168 Function Run Fun【记忆化递归】相关推荐

  1. LeetCode 337. 打家劫舍 III(记忆化+递归)

    文章目录 1. 题目 1.1 相关题目: 2. 解题 2.1 递归 2.2 记忆化递归 1. 题目 在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区.这个地区只有一个入口,我们称 ...

  2. 爬楼梯与路径类题目记忆化递归与动态规划双解法(Leetcode题解-Python语言)

    70. 爬楼梯(剑指 Offer 10- II. 青蛙跳台阶问题) 递归(英语:Recursion),是指在函数的定义中使用函数自身的方法.有意义的递归通常会把问题分解成规模缩小的同类子问题,当子问题 ...

  3. [剑指offer][JAVA]面试题第[10-1]题[斐波那契数列][动态规划][记忆化递归]

    [问题描述][中等] 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项.斐波那契数列的定义如下:F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N ...

  4. LeetCode 87. 扰乱字符串(记忆化递归 / DP)

    文章目录 1. 题目 2. 解题 2.1 记忆化递归 2.2 动态规划 1. 题目 给定一个字符串 s1,我们可以把它递归地分割成两个非空子字符串,从而将其表示为二叉树. 下图是字符串 s1 = &q ...

  5. LeetCode 514. 自由之路(记忆化递归 / DP)

    文章目录 1. 题目 2. 解题 1. 题目 电子游戏"辐射4"中,任务"通向自由"要求玩家到达名为"Freedom Trail Ring" ...

  6. LeetCode 329. 矩阵中的最长递增路径(记忆化递归)

    文章目录 1. 题目 2. 解题 2.1 记忆化递归 2.2 拓扑排序 1. 题目 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向 ...

  7. UVA10192 Vacation【LCS+DP+记忆化递归】

    You are planning to take some rest and to go out on vacation, but you really don't know which cities ...

  8. HDU2018 母牛的故事【递推+记忆化递归】

    母牛的故事 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  9. HDU2569 彼岸【打表+记忆化递归】

    彼岸 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission ...

最新文章

  1. bashrc, bash_profile etc;
  2. Spring Boot基本配置
  3. 每日英语:Five Really Dumb Money Moves You've Got to Avoid
  4. 2016年3-8,哦,好日子
  5. Linux基础教程之系统管理篇系统部署
  6. Atitit Major island groups and archipelagos 主要的岛群和群岛目录资料目录1. 岛群 波利尼西亚(Polynesia, 美拉尼西亚(Melanesia,
  7. 湘潭比赛有感---铩羽之行
  8. Rhino基础教程---四管混接、五管混接
  9. 前端使用js压缩图片上传
  10. 91卫图助手免费获取高清影像
  11. 安卓自动化工具(附自动刷抖音脚本实例)
  12. Dubbo的failsafe容错策略
  13. 大数据的处理是怎样的过程
  14. IOI2021集训队作业
  15. RT-Thread源码-__rt_ffs函数剖析
  16. 网络安全防御体系建设-防守实例
  17. 判断三条边是否构成三角形
  18. python主网站_python主网站提供的集成开发环境名称为IDLE
  19. 新手对Ubuntu应该这么学!
  20. 【韩顺平】Java线程(基础)知识点总结

热门文章

  1. GDAL C#中文路径,中文属性名称乱码问题
  2. Shell脚本和Python查看Nginx并发连接数、进程数和常驻内存占用情况
  3. 分布式系统研发初体验
  4. JavaScript(四)字符串类型
  5. MyBatis Plus 导入IdType失败
  6. yum提示Another app is currently holding the yum lock; waiting for it to exit...处理办法
  7. Hive中元数据表的含义
  8. oracle中 initcpa,oracle  11g rman备份
  9. hbase建表语句_HBase 中文参考指南真不少~
  10. FindWindowEX应用实例二则