传送门

题目描述

对于一个递归函数w(a,b,c)w(a,b,c)w(a,b,c)
如果a≤0a≤0orb≤0b≤0orc≤0c≤0a \le 0a≤0 or b \le 0b≤0 or c \le 0c≤0a≤0a≤0orb≤0b≤0orc≤0c≤0就返回值11.
如果a>20a>20orb>20b>20orc>20c>20a>20a>20 or b>20b>20 or c>20c>20a>20a>20orb>20b>20orc>20c>20就返回w(20,20,20)w(20,20,20)w(20,20,20)
如果a&lt;ba&lt;ba&lt;ba&lt;ba<ba<b并且b&lt;cb&lt;cb&lt;cb&lt;cb<cb<c 就返回w(a,b,c−1)+w(a,b−1,c−1)−w(a,b−1,c)w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c)w(a,b,c−1)+w(a,b−1,c−1)−w(a,b−1,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)w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1)w(a−1,b,c)+w(a−1,b−1,c)+w(a−1,b,c−1)−w(a−1,b−1,c−1)
这是个简单的递归函数,但实现起来可能会有些问题。当a,b,ca,b,ca,b,c均为15时,调用的次数将非常的多。你要想个办法才行.

/*
比如 w(30,-1,0)w(30,−1,0)既满足条件1又满足条件2
这种时候我们就按最上面的条件来算
所以答案为1
*/

输入格式:
会有若干行。
并以-1,-1,-1结束。
保证输入的数在[−9223372036854775808,9223372036854775807][-9223372036854775808,9223372036854775807][−9223372036854775808,9223372036854775807]之间,并且是整数。

输出格式:
输出若干行,每一行格式:
w(a,b,c)=answ(a, b, c) = answ(a,b,c)=ans
注意空格。

输入样例#1:
1 1 1
2 2 2
-1 -1 -1
输出样例#1:
w(1, 1, 1) = 2
w(2, 2, 2) = 4

分析

  • 这道题是一道比较基础的记忆化搜索题目。依照题意,我们只需要开一个每一维都比20稍大的三维数组保存中间状态的值,避免递归过程中大量的重复计算就可以解决这道题了。
  • 除此之外,因为数组下标不能为负,需要注意条件的判断。避免使用为负值或者越界的下标。

代码如下

import java.io.BufferedInputStream;
import java.util.*;
public class Main {static long ws[][][]=new long [25][25][25];static long w(int a,int b,int c) {if(a<=0 || b<=0 || c<=0)return 1;if(ws[a][b][c]==0) {if(a<b && b<c) ws[a][b][c]=w(a, b, c-1)+w(a, b-1, c-1)-w(a, b-1, c);                else ws[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);}return ws[a][b][c];}public static void main(String[] args) {long a,b,c;Scanner cin=new Scanner(new BufferedInputStream(System.in));while(cin.hasNext()) {a=cin.nextInt();b=cin.nextInt();c=cin.nextInt();if(a==-1&&b==-1&&c==-1)break;if(a<=0 || b<=0 || c<=0) {System.out.println("w("+a+", "+b+", "+c+") = 1");}else if(a>20 || b>20 || c>20) {System.out.println("w("+a+", "+b+", "+c+") = "+w(20, 20, 20));}else {System.out.println("w("+a+", "+b+", "+c+") = "+w((int)a, (int)b, (int)c));}}cin.close();}
}

P1464 Function(递归式的记忆化搜索)相关推荐

  1. UVA - 10253 Series-Parallel Networks(递推式、记忆化搜索写法)

    题目:UVA-10253 题目翻译(来自蓝书): 串并联网络有两个端点,一个叫源,一个叫汇,递归定义如下: (1) 一条单独的边是串并联网络. (2) 若G1和G2是串并联网络,把它们的源和源接在一起 ...

  2. 动态规划入门——记忆化搜索

    文章目录 记忆化搜索 1.数塔问题 2.滑雪 总结 记忆化搜索 1.数塔问题 [动规:递归求解] 递推方程: 不难发现,最后一层的点到最后一层的最大距离即为自己对应的值a[n - 1][y],这个就是 ...

  3. 【记忆化搜索】P1464 Function

    https://www.luogu.com.cn/problem/P1464 考点:记忆化搜索.递归.map 题意: 按照题目要求写递归函数. 解法: 在函数开始时查看哈希表中是否已经有答案记录,如果 ...

  4. 巧用记忆化搜索代替暴力递归(洛谷P1464题题解,Java语言描述)

    题目要求 P1464题目链接 分析 如果--你信了这题干,真的写了递归--TLE警告!!! 所以,就需要优化嘛-- [−9223372036854775808,9223372036854775807] ...

  5. Python数据结构与算法分析 第四章 递归 贪心 动态规划bp 记忆化搜索

    递归算法也总结出 三定律  1,递归算法必须有一个基本结束条件(最小规模问题的直接解决)  2, 递归算法必须能改变状态向基本结束条件演 进(减小问题规模)  3,递归算法必须调用自身 (解决减小了规 ...

  6. 2017广东工业大学程序设计竞赛决赛 题解源码(A,数学解方程,B,贪心博弈,C,递归,D,水,E,贪心,面试题,F,贪心,枚举,LCA,G,dp,记忆化搜索,H,思维题)...

    心得: 这比赛真的是不要不要的,pending了一下午,也不知道对错,直接做过去就是了,也没有管太多! Problem A: 两只老虎 Description 来,我们先来放松下,听听儿歌,一起&qu ...

  7. 记忆化搜索 递归缓存_需要微缓存吗? 营救记忆

    记忆化搜索 递归缓存 缓存解决了各种各样的性能问题. 有很多方法可以将缓存集成到我们的应用程序中. 例如,当我们使用Spring时,可以轻松使用@Cacheable支持. 非常简单,但我们仍然必须配置 ...

  8. 数字三角形——递归、递推、记忆化搜索

    数字三角形 描述:          有一个由非负整数组成的三角形,第一行只有一个数,除了最下行之外每个数的左下方和右下方各有一个数. 问题:              从第一行的数开始,每次可以往左 ...

  9. 递归 dfs 记忆化搜索 动态规划

    今天做洛谷P1434 [SHOI2002]滑雪 的时候仔细想了想记忆化搜索 现在总结一下 为了描述问题的某一状态,必须用到该状态的上一状态,而描述上一状态,又必须用到上一状态的上一状态--这种用自已来 ...

最新文章

  1. 使用editcap命令将ERF格式转换为pcap格式
  2. Nginx中worker connections问题的解决方法
  3. android 常用 style,Android中 Styles和Themes
  4. 2021-05-10 linux中的find命令——查找文件名
  5. 那些年,我们处理过的SQL问题
  6. 剑芒罗曼史2解图片程序
  7. html向下的箭头符号怎么打,向下的箭头怎么打
  8. 网络虚拟(包括overlay、underlay介绍)
  9. oracle sql查询取整,Oracle SQL语句操作数字:取整、四舍五入及格式化
  10. 安科瑞数据中心行业电能质量监测与治理方案-李亚俊
  11. CANopen协议,上位机开发(C#)
  12. 问卷星刷问卷python_Python+Selenium自动刷问卷星问卷
  13. 基于tkinter库txt文件操作的Python界面化图书管理系统
  14. 小程序商城源码代码分析
  15. Wilcoxon符号秩检验详解
  16. WIFI管家实现原理:局域网设备扫描
  17. 人脸检测之MTCNN:测试代码理解
  18. android 心形上漂动画,PowerPoint Viewer制作一个漂亮心形飞出动画的操作教程
  19. 聚类算法及python实现——模糊C均值(FCM)
  20. 复盘100道数据结构题型总结与案例分析

热门文章

  1. optee中添加一个中断以及底层代码的相关解读
  2. 免费Opengrok-代码阅读工具:Kernel,Optee,ATF,Uboot...
  3. 详解虚函数的实现过程之初探虚表(1)
  4. win10如何换pip源
  5. KPCR:CPU控制区(Processor Control Region)
  6. 某平台的一次简单渗透测试记录
  7. SQLite 数据库注入总结
  8. 学习运维工程师是正确的选择,发展与前景都是和好的
  9. 【PHP】常用日期函数
  10. 6、MySQL查看和修改事务隔离级别