POJ1579 HDU1331 HDU1579 ZOJ1168 Function Run Fun【记忆化递归】
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【记忆化递归】相关推荐
- LeetCode 337. 打家劫舍 III(记忆化+递归)
文章目录 1. 题目 1.1 相关题目: 2. 解题 2.1 递归 2.2 记忆化递归 1. 题目 在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区.这个地区只有一个入口,我们称 ...
- 爬楼梯与路径类题目记忆化递归与动态规划双解法(Leetcode题解-Python语言)
70. 爬楼梯(剑指 Offer 10- II. 青蛙跳台阶问题) 递归(英语:Recursion),是指在函数的定义中使用函数自身的方法.有意义的递归通常会把问题分解成规模缩小的同类子问题,当子问题 ...
- [剑指offer][JAVA]面试题第[10-1]题[斐波那契数列][动态规划][记忆化递归]
[问题描述][中等] 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项.斐波那契数列的定义如下:F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N ...
- LeetCode 87. 扰乱字符串(记忆化递归 / DP)
文章目录 1. 题目 2. 解题 2.1 记忆化递归 2.2 动态规划 1. 题目 给定一个字符串 s1,我们可以把它递归地分割成两个非空子字符串,从而将其表示为二叉树. 下图是字符串 s1 = &q ...
- LeetCode 514. 自由之路(记忆化递归 / DP)
文章目录 1. 题目 2. 解题 1. 题目 电子游戏"辐射4"中,任务"通向自由"要求玩家到达名为"Freedom Trail Ring" ...
- LeetCode 329. 矩阵中的最长递增路径(记忆化递归)
文章目录 1. 题目 2. 解题 2.1 记忆化递归 2.2 拓扑排序 1. 题目 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向 ...
- 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 ...
- HDU2018 母牛的故事【递推+记忆化递归】
母牛的故事 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
- HDU2569 彼岸【打表+记忆化递归】
彼岸 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission ...
最新文章
- bashrc, bash_profile etc;
- Spring Boot基本配置
- 每日英语:Five Really Dumb Money Moves You've Got to Avoid
- 2016年3-8,哦,好日子
- Linux基础教程之系统管理篇系统部署
- Atitit Major island groups and archipelagos 主要的岛群和群岛目录资料目录1. 岛群 波利尼西亚(Polynesia, 美拉尼西亚(Melanesia,
- 湘潭比赛有感---铩羽之行
- Rhino基础教程---四管混接、五管混接
- 前端使用js压缩图片上传
- 91卫图助手免费获取高清影像
- 安卓自动化工具(附自动刷抖音脚本实例)
- Dubbo的failsafe容错策略
- 大数据的处理是怎样的过程
- IOI2021集训队作业
- RT-Thread源码-__rt_ffs函数剖析
- 网络安全防御体系建设-防守实例
- 判断三条边是否构成三角形
- python主网站_python主网站提供的集成开发环境名称为IDLE
- 新手对Ubuntu应该这么学!
- 【韩顺平】Java线程(基础)知识点总结
热门文章
- GDAL C#中文路径,中文属性名称乱码问题
- Shell脚本和Python查看Nginx并发连接数、进程数和常驻内存占用情况
- 分布式系统研发初体验
- JavaScript(四)字符串类型
- MyBatis Plus 导入IdType失败
- yum提示Another app is currently holding the yum lock; waiting for it to exit...处理办法
- Hive中元数据表的含义
- oracle中 initcpa,oracle 11g rman备份
- hbase建表语句_HBase 中文参考指南真不少~
- FindWindowEX应用实例二则