落谷 P1464 function (空间换时间、记忆化搜索)
题目描述
对于一个递归函数w(a,b,c)w(a,b,c)w(a,b,c)
- 如果a≤0a \le 0a≤0 or b≤0b \le 0b≤0 or c≤0c \le 0c≤0就返回值111.
- 如果a>20a>20a>20 or b>20b>20b>20 or c>20c>20c>20就返回w(20,20,20)w(20,20,20)w(20,20,20)
- 如果a<ba<ba<b并且b<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时,调用的次数将非常的多。你要想个办法才行.
/* absi2011 : 比如 w(30,−1,0)w(30,-1,0)w(30,−1,0)既满足条件1又满足条件2
这种时候我们就按最上面的条件来算
所以答案为1
*/
输入格式
会有若干行。
并以−1,−1,−1-1,-1,-1−1,−1,−1结束。
保证输入的数在[−9223372036854775808,9223372036854775807][-9223372036854775808,9223372036854775807][−9223372036854775808,9223372036854775807]之间,并且是整数。
输出格式
输出若干行,每一行格式:
w(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
#include<iostream>
using namespace std;long a,b,c;
int result[21][21][21]={0};//用result数组保存计算过的数的结果long w(int a,int b,int c){if( a<=0 || b<=0 || c<=0) return 1;else if( a>20 || b>20 || c>20) return w(20,20,20);if(result[a][b][c]!=0) return result[a][b][c];//这句很重要 else if(a<b && b<c) {result[a][b][c-1] = w(a,b,c-1);result[a][b-1][c-1] = w(a,b-1,c-1);result[a][b-1][c] = w(a,b-1,c);return result[a][b][c-1] +result[a][b-1][c-1]-result[a][b-1][c];}//函数里面return之后就不会再执行return后面的东西了result[a-1][b][c] =w(a-1,b,c);result[a-1][b-1][c] = w(a-1,b-1,c); result[a-1][b][c-1] = w(a-1,b,c-1);result[a-1][b-1][c-1] = w(a-1,b-1,c-1);return result[a-1][b][c] +result[a-1][b-1][c] + result[a-1][b][c-1] -result[a-1][b-1][c-1];}int main(){long a,b,c;while(true){cin>>a>>b>>c;if(a==-1 && b==-1 && c==-1) return 0;cout<<"w("<<a<<", "<<b<<", "<<c<<") = "<<w(a,b,c)<<endl;}
// while(cin>>a>>b>>c){
// if(a==-1 && b==-1 && c==-1) return 0;
// cout<<"w("<<a<<", "<<b<<", "<<c<<") = "<<w(a,b,c)<<endl;
// }return 0;
} //好苦恼啊 ,为啥用下面的while输入(注释掉的部分)就会错,自己编译出来都是对的,提交了之后就全错
落谷 P1464 function (空间换时间、记忆化搜索)相关推荐
- 洛谷:尼克的任务【记忆化搜索】【记忆化搜索的使用条件】
个人对记忆化搜索有以下感悟[不保证一定正确,但保证有参考价值] 我们将搜索的过程看成在一个有向无环图上遍历的过程[也必然是这个过程]: 首先,记忆化搜索之所以能让时间复杂度为指数级别的搜索过程降到线性 ...
- 洛谷P4133 [BJOI2012]最多的方案(记忆化搜索)
题意 题目链接 求出把$n$分解为斐波那契数的方案数,方案两两不同的定义是分解出来的数不完全相同 Sol 这种题,直接爆搜啊... 打表后不难发现$<=1e18$的fib数只有88个 最先想到的 ...
- leetcode-383-Ransom Note(以空间换时间)
题目描述: Given an arbitrary ransom note string and another string containing letters from all the magaz ...
- 巧用记忆化搜索代替暴力递归(洛谷P1464题题解,Java语言描述)
题目要求 P1464题目链接 分析 如果--你信了这题干,真的写了递归--TLE警告!!! 所以,就需要优化嘛-- [−9223372036854775808,9223372036854775807] ...
- ie浏览器查看vue中js_浅析 Vue.js 中那些空间换时间的操作
Hello,各位小伙伴,接下来的一段时间里,我会把我的课程<Vue.js 3.0 核心源码解析>中问题的答案陆续在我的公众号发布,由于课程的问题大多数都是开放性的问题,所以我的答案也不一定 ...
- 以空间换时间——动态规划算法及其应用:矩阵链相乘
动态规划算法是5大算法基础中最重要的一个,它专门用来解决平面世界下的应用,即会多次使用二维数组. 当然动态规划算法是空间换时间的算法,也就是说:我们可以利用空间资源来使某算法问题的时间复杂度降到最低. ...
- JS哈希表算法——空间换时间
题目来源力扣: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一个元素 ...
- FPGA之道(62)时空变换之空间换时间
文章目录 前言 时空变换之空间换时间 缓存提速使用 模块复制 同频模块复制 缓存降频复制 缓存降频使用 逻辑拆分 流水线 流水线的由来 如何在组合逻辑中使用流水线 如何在时序逻辑中使用流水线 顺序系统 ...
- 前端遍历导致查询数据时间过长_OLAP 服务器,空间换时间可行吗?
[摘要] 全量预汇总真的是提高 OLAP 性能的可行方案吗?点击了解OLAP 服务器,空间换时间可行吗? 多维分析提供拖拽.旋转.切片.钻取等等人机交互操作,必须有秒级的响应速度.而这些操作对应的明细 ...
最新文章
- 深入理解Java自带的线程池和缓冲队列
- ascii码_umask,补码,ASCII码:稍微深入考虑一点
- Lindström–Gessel–Viennot lemma
- 魅族升级android p,高通宣布:这些手机将第一时间升级Android P!
- 华科团队发布 OVIS 遮挡视频实例分割基准数据集
- Oracle Restart能够用来给Oracle GoldenGate 做 High Availability 使用么?
- (转)淘淘商城系列——SSM框架整合之表现层整合
- MyBatis操作数据库
- 解决eclipse安装Darkest Dark Theme报错
- 雷电模拟器 服务器无响应,雷电模拟器怎么用脚本长时间运行未响应win10
- 题解 P2184 【贪婪大陆】
- MMR 排序多样化重排序算法
- IPv6技术详解:基本概念、应用现状、技术实践(上篇)
- 快速排序详细分析--单向扫描和双向扫描
- 【小样本基础】深度学习中的元学习:元学习的理解、经典MAML算法、用元学习解决具体问题的思路、元学习的分类
- Java同步器之AbstractOwnableSynchronizer详解
- JAVA开发与运维(docker运维常规操作)
- 一个U盘装N款系统不是梦!超级好用的装机神器来了!
- 软件测试周刊(第51期):漂漂亮亮、从从容容地出现在大家面前,不仅是虚荣的事,更是庄重与自信的事。 ​​​
- 初试vue写echarts可视化布局
热门文章
- Android为什么不能在子线程更新UI
- STM32 internal command error 问题
- 同样是模拟高清,谁才是真正的AHD?汽车OEM选型应慎重
- UC缓存的php格式视频,如何把UC浏览器缓存的零碎视频转换成完整的mp4
- 华为称包裹遭美国联邦快递“转运” 重新审视双方合作关系
- win7+ubuntu双系统双固态硬盘安装
- 什么是标签(Tags)
- 中国电信2016年IT研发工程师笔试题
- Android自定义可拖拽的悬浮按钮---DragFloatingActionButton
- 程序员们都在用什么键盘敲代码?