OI中的励志名言——“得打表法者,得天下”

1 篇文章 0 订阅
1 篇文章 0 订阅

前言

吾有一术,曰打表法。或问:“打表法乃何物?”此乃OI中一术也,其法曰:将答案举数之,而后储之,须时取之

OIer有云:“得打表法者,得天下也。”或时,打表法不最善。立过多数之则大,不宜用。打表法宜递推,故不可乱用

正文

前面那些话是打表法的介绍,大概意思是这样的:

我有一个方法,叫做打表法。也许有人会问:“打表法是什么?”这是OI中的一个做题方法,方法是:将计算后的答案枚举出来,然后存储至数组中,需要时直接提取。

OIer常说:“会了打表法,就能答对许多枚举题。”但是有些时候,打表法不是最好的。如果数据量过大,计算量也就大了,不适合使用。打表法适合做递推题,所以打表法不可以乱用。

好了,翻译结束。我再也不用散装文言来恶心大家了。

举个例子

先给你们看几张图:

对,你没看错,这些都是我用打表法作对的题目。哎,或许有人会问:“作者,你是怎么算到这么多位的呢?”我只能说:

我用了第三方应用(Dev-C++ 5.11)打了递推公式算的!!!

我相信在座的读者们,你们一定会问:“你都用了递推公式算,那你为什么不直接写递推呢?”

对于这个问题,我只能说:

闲的!嘻嘻嘻

打表法的方法以及注意事项

打表法虽然好用,但!不可乱用(怎么觉得我的散装文言又来了呢……)。打表法做递推的步骤有这些:

一、确定计算公式

用第三方应用(我用的是Dev-C++ 5.11)先计算出递推公式,然后根据题目逻辑计算。

二、注意题目数据范围

有些题目数据量很小,可以小范围打表;面对数据量超过1000时可以大范围打表。

三、打表

这个……不用我多讲了吧……

四、注意事项

一、注意数据范围

有些时候,数组开小了,容易导致题目RE(Runtime Error,运行时错误)或编译错误。

二、注意数组数据类型

这个是重点!!!有些时候,数据量大了,数据范围也变广了,这时候就得开long long或者是unsigned long long了,要不然会爆掉。

三、注意时空消耗

一般来说,打表法的时间复杂度为O(1),但人家空间复杂度为O(n)左右,只要数据量一大,超过10^8(10^8有点悬,10^7肯定不会),很容易就会MLE(Memory Limit Exceeded,内存超限),所以数据量大的时候,就别用打表啦。

例题

我是在有道OJ上做的,网站留给你:

小型打表

斐波那契数列

爬楼梯

大规模打表

上台阶

平面直线交点问题

后记

呃……最近因为去军训和补习CSP去了,没来得及更新,央求大家支持一下~

(PS:作者小学五年级哦~)

祝各位OIer们(包括我)CSP或NOIP或NOI考试顺利!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值