记忆化搜索(Function,天下第一)

Function

这是一道很直观的递归题目,但是使用递归会导致时间超限,所以需要使用记忆化搜素。
首先把坑点讲一下:出题人会给出负数,而我们知道数组下标是不能有负数的,如果是二维数组还可以用map数组进行储存,但是这个函数是有三个变量,所以就只能使用三维数组了,这也就意味着在dfs函数的最前面我们需要进行特判,看这个数组下标是否处于正数,如果是正数我们就直接返回数组的值,如果是负数那么我们就用递归来搞定

代码如下:

#include<iostream>
#include<cstdio>
#include<stdlib.h>using namespace std;
typedef  long long ll;
ll wa[40][40][40];
ll w(ll a,ll b,ll c)
{if(a<=20&&b<=20&&c<=20&&a>=0&&b>=0&&c>=0)if(wa[a][b][c]){return wa[a][b][c];}if(a<=0||b<=0||c<=0)return 1;if(a>20||b>20||c>20)return w(20,20,20);if(a<b&&b<c)return wa[a][b][c]=w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c);return wa[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()
{ll a,b,c;while(1){cin>>a>>b>>c;if(a==-1&&b==-1&&c==-1)return 0;elseprintf("w(%lld, %lld, %lld) = %lld\n",a,b,c,w(a,b,c));}return 0;
}

 天下第一

这个题目是个什么意思呢? 在最开始我写这道题的时候看不懂。

就是在我们递归的时候,第一个函数变量放的是(x+y)%mod;  这个就为新的x 那么新的y就是((x+y)%mod+y)%mod 所以是不需要进行分奇偶讨论的,直接这样。

刚刚讲的是这个题目的坑点之一,接下来是第二个坑点:

数据大小,这个的数据大小比较小,而题目卡这个数据很死,所以我们就将最耗空间的二维数组开为short类型。

第三就是error的判断:如果一个数已经出现过了,那么再一次出现就说明进入了死循环,这个时候就分不出胜负了,所以将重复出现的数进行标记,标记为-1,将这个特判条件放在第一位,如果为-1,直接返回-1,再在主函数进行分类讨论

代码如下

#include<iostream>
#include<cstdio>
using namespace std;
int n,mod;short a[10010][10010];
int dfs(int x,int y)
{if(a[x][y]==-1) return -1;if(a[x][y]) return a[x][y];a[x][y]=-1;if(x==0) return a[x][y]=1;if(y==0) return a[x][y]=2;int tmp=(x+y)%mod;return a[x][y]=dfs(tmp,(tmp%mod+y)%mod);
}
int main()
{cin>>n>>mod;int x,y;for(int i=1;i<=n;i++){cin>>x>>y;if(dfs(x,y)==1)printf("%d\n",1);if(dfs(x,y)==2)printf("%d\n",2);if(dfs(x,y)==-1)printf("error\n");}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/498825.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DETR(1):论文详解

文章目录 1. DETR 模型结构2.损失函数2.1 预测结果和GT 的匹配2.2 训练的loss计算3.实验3.1 大物体表现效果好3.2 Transformer Encoder 和Decoder的作用3.3 object query4. 伪代码5. 结论

Python set 集合

Python 集合 集合&#xff08;set&#xff09;是一个无序的不重复元素序列。 集合中的元素不会重复&#xff0c;并且可以进行交集、并集、差集等常见的集合操作。 可以使用大括号 { } 创建集合&#xff0c;元素之间用逗号 , 分隔&#xff0c; 或者也可以使用 set() 函数创建…

width:100%和width:auto有啥区别

项目中使用了with属性&#xff0c;突然好奇auto 和 100% 的区别&#xff0c;特地搜索实践总结了一下观点 一、 width属性介绍二、 代码带入三、 分析比较四、 总结 一、 width属性介绍 width 属性用于设置元素的宽度。width 默认设置内容区域的宽度&#xff0c;但如果 box-siz…

皇冠测评:网络电视盒子哪个品牌好?电视盒子排行榜

欢迎各位来到我们的测评频道&#xff0c;本期我们要分享的产品是电视盒子&#xff0c;因很多网友留言不知道网络电视盒子哪个品牌好&#xff0c;我们通过为期一个月的测评后整理了电视盒子排行榜&#xff0c;想买电视盒子的可以看看下面这五款产品&#xff0c;它们各方面表现非…

(每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第12章 项目质量管理(三)

博主2023年11月通过了信息系统项目管理的考试&#xff0c;考试过程中发现考试的内容全部是教材中的内容&#xff0c;非常符合我学习的思路&#xff0c;因此博主想通过该平台把自己学习过程中的经验和教材博主认为重要的知识点分享给大家&#xff0c;希望更多的人能够通过考试&a…

污水处理设备远程监控:HiWoo Cloud如何打造智慧环保新时代

随着工业化和城市化的快速推进&#xff0c;污水处理成为了保护环境、维护生态平衡的重要一环。传统的污水处理设备管理方式往往依赖于人工巡检和现场控制&#xff0c;不仅效率低下&#xff0c;而且难以实时掌握设备的运行状况。在这个背景下&#xff0c;HiWoo Cloud平台推出了污…

Matlab: Introduction to Hybrid Beamforming

文章目录 来源混合波束赋形的基本概念System Setup关键函数 来源 在matlab的命令行输入 doc hybrid beamforming 混合波束赋形的基本概念 混合波束形成简介 本例介绍了混合波束形成的基本概念&#xff0c;并说明了如何模拟这种系统。 现代无线通信系统使用空间复用来提高散…

模拟算法题练习(一)

模拟算法介绍&#xff1a; 模拟算法通过模拟实际情况来解决问题&#xff0c;一般容易理解但是实现起来比较复杂&#xff0c;有很多需要注意的细节&#xff0c;或者是一些所谓很“麻模“的东西。 模拟题一般不涉及太难的算法&#xff0c;一般就是由较多的简单但是不好处理的部…

如何开发自己的npm包并上传到npm官网可以下载

目录 搭建文件结构 开始编写 发布到npm 如何下载我们发布的npm包 搭建文件结构 先创建新文件夹,按照下面的样子布局 .├── README.md //说明文档 ├── index.js //主入口 ├── lib //功能文件 └── tests //测试用例 然后再此根目录下初始化package包 npm init…

蓝桥杯题练习:平地起高楼

题目要求 function convertToTree(regions, rootId "0") {// TODO: 在这里写入具体的实现逻辑// 将平铺的结构转化为树状结构&#xff0c;并将 rootId 下的所有子节点数组返回// 如果不存在 rootId 下的子节点&#xff0c;则返回一个空数组}module.exports convert…

西门子WinCC冗余项目使用

1 如果需要使用WinCC冗余系统时&#xff0c;请仔细阅读下面的文档&#xff0c;它将解决以下几个问题&#xff1a; &#xff08;1&#xff09;WinCC冗余有什么样的功能&#xff1f; &#xff08;2&#xff09;需要购买什么样的授权&#xff1f; &#xff08;3&#xff09;应…

高项软考电子版论文答题纸(附下载)

24年软考又要来了&#xff0c;作为高项软考的拦路虎&#xff0c;论文你准备好了吗&#xff1f;&#xff01;记住在开始考试之前一定要用论文答题纸上把准备好的论文&#xff0c;在规定的时间内写上几遍&#xff0c;一是现在很少动笔写字了。二是、熟悉一下论文考试的感觉。 准备…