当前位置: 首页 > news >正文

算法技巧——打表

什么是打表?

打表,是一个信息学专用术语,意指对一些题目,通过打表技巧获得一个有序表或常量表,来执行程序某一部分,优化时间复杂度。这种算法也可用于在对某种题目没有最优解法时,用来得到分数的一种策略。

交上去的代码有严格的运行时间限制,但是代码在本地运行时间没有限制,所以可以提交前,先在本地运行,算出所有可能的结果,正式提交代码,开个数组把所有答案存起来,做到直接输出。

注意这个技巧只适用于输入的值域不大(如,输入只有一个数,而且范围很小)的问题,否则可能会导致代码过长、MLE、打表需要的时间过长等问题。

打表

一般来说打表分为两部分:打表程序和提交程序。

打表程序算出所有可能数据对应结果,提交程序存储答案并输出

例子:级数求和

首先写程序,计算出不同输入值对应的所有答案

#include<bits/stdc++.h>
using namespace std;int f(int k)
{double s=0;double i=1;while(s<=k){s=s+1/i;i++;}return i-1;
}int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);for(int i=1;i<=15;i++){cout<<f(i)<<',';}return 0;
}

接着编写提交程序,把所有结果存储到数组中,根据输入的变量值,直接查找对应答案

#include<bits/stdc++.h>using namespace std;int res[15]={2,4,11,31,83,227,616,1674,4550,12367,33617,91380,248397,675214,1835421};int main(){ios::sync_with_stdio(false);cin.tie(nullptr);int k;cin>>k;cout<<res[k-1];return 0;}

分段打表

代码长度有限,如果每个结果都存下来,不太现实,应用分块的思想,将数据范围分成多个块,预处理每一块的信息,对不满一块的直接暴力,即一种平衡了代码长度和复杂度的技巧

相关文章:

  • 数字智慧方案5860丨智慧机场整体解决方案(41页PPT)(文末有下载方式)
  • Java大师成长计划之第10天:锁与原子操作
  • PINNs案例——多介质分区温度场
  • Nacos使用
  • DeepSeek实战--Function Calling
  • [官方 IP] Utility Flip-Flop
  • 不小心误删了文件,找Windows数据恢复工具来帮忙
  • 泰迪杯特等奖案例学习资料:基于CLIP模型微调与知识蒸馏的多模态图文检索系统设计
  • Linux-常用监控工具
  • 【Touching China】2002-2006
  • C++_STL
  • MLPerf基准测试工具链定制开发指南:构建领域特异性评估指标的实践方法
  • CPU:AMD的线程撕裂者(Threadripper)系列
  • 18. LangChain分布式任务调度:大规模应用的性能优化
  • PostgreSQL 查看表膨胀情况的方法
  • [Control-Chaos] Heart Broken(心臟破裂)
  • CPO-BP+NSGA,豪冠猪优化BP神经网络+多目标遗传算法!(Matlab完整源码和数据)
  • 2.maven 手动安装 jar包
  • IntelliJ IDEA 保姆级使用教程
  • 密码学_加密
  • 美国警方:爱达荷州交通事故致7人死亡,8名伤者预计无生命危险
  • 洪纬读《制造三文鱼》丨毒素缠身的水生鸡
  • 美伊谈判因“后勤原因”推迟,伊朗:视美国做法再定谈判日期
  • 新势力4月销量出炉:零跑逾4万辆再夺冠,蔚来环比增近六成,小米下滑
  • 空调+零食助顶级赛马备战,上海环球马术冠军赛将焕新登场
  • 摩天大楼天津117大厦复工背后:停工近十年,未知挑战和压力仍在