打表

本文分享了博弈论的学习笔记和个人体验,探讨了在数据规模适中且容易超时的情况下使用打表法的策略。通过具体实例,展示了如何利用打表法简化问题解决过程,提高代码效率。

博弈论记的笔记直接关机给没了,挺桑心的。算了,不重写了吧。

附上链接:https://blog.youkuaiyun.com/Hi_KER/article/details/81188352

对于数据小又容易超时的题,可以采取打表法

打表就是将所有输入情况的答案保存在代码中,输入数据后直接输出就可以了

打表法具有快速,易行(可以写暴力枚举程序)的特点,缺点是代码可能太大,或者情况覆盖不完

对于不会超时,数据规模适合打表,为了简洁你也可以打表

问题:https://www.luogu.org/problemnew/show/P1149

#include<bits/stdc++.h>
using namespace std;
int res[2000];
int main(){
	int a[10]={6,2,5,5,4,5,6,3,7,6};
	res[0]=6;
	for(int i=1;i<=2000;i++){
		int k=i;int temp=0;
		
		while(k){
			temp+=a[k%10];
			k/=10;
		}
		res[i]=temp;
	}
	int n=0;
	again:
	int num=0;
	for(int i=0;i<=999;i++){
		for(int j=0;j<=999;j++){
			if(n==res[i]+res[j]+res[i+j]+4)
			num++;
		}
	}
	cout<<num<<endl;
	if(n<24) {
		n++;
		goto again;
	}
	return 0;
} 

提交:

#include<bits/stdc++.h>
using namespace std;
int a[100]={0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,8,9,6,9,29,39,38,65,88,128};
int main(){
	int n;
	cin>>n;
	cout<<a[n]<<endl;
	return 0;
}

。。。。没写完,以后再修改吧。

在信息学奥林匹克竞赛(信奥)中,打表是一种重要的技巧,下面介绍其方法及应用。 ### 打表方法 #### 手动打表 当问题规模较小时,可通过手动计算来完成打表。例如对于一些简单的数学规律问题,像求较小范围内的斐波那契数列值,可直接根据斐波那契数列的定义\(F(n)=F(n - 1)+F(n - 2)\)(\(n\gt2\),\(F(1)=F(2)=1\)),手动算出\(n\)较小时的结果并记录下来。 #### 程序打表 - **暴力求解打表**:对于数据规模较小的情况,可使用暴力算法来生成数据。如引用[2]中提到在T2问题里,对于较小的\(n\),可以使用暴力枚举所有可能的序列来计算结果。例如在一个排列组合问题中,若要统计满足某种条件的排列数量,当\(n\)较小时(如\(n\leq6\)),可使用全排列生成算法生成所有排列,然后逐一检查是否满足条件并计数。以下是一个简单的Python示例,用于统计长度为\(n\)的二进制序列中相邻位不同的序列数量: ```python from itertools import product n = 4 count = 0 for seq in product([0, 1], repeat=n): valid = True for i in range(1, n): if seq[i] == seq[i - 1]: valid = False break if valid: count += 1 print(count) ``` - **优化算法打表**:当问题规模稍大时,暴力算法可能会超时,此时可使用优化后的算法来打表。如在动态规划问题中,通过状态转移方程来计算结果并存储。像引用[1]中的代码,使用动态规划计算\(dp[i][j]\)的值,通过状态转移方程`if(s[i] == s[j]) dp[i][j] = dp[i + 1][j + 1] + 1` 来填充二维数组\(dp\),这其实也是一种打表的过程,将中间结果存储在数组中。 ### 打表应用 #### 寻找规律 通过打表得到一系列数据后,可观察数据之间的规律。如引用[2]中T2问题,打表发现所有序列其实都只有三种答案,分别满足\(f(n)=f(n - 1)*3 + 2\)、\(f(n)=f(n - 1)*2 + 1\)、\(f(n)=f(n - 1)*3\) ,先用暴力把\(n = 3\)的答案算出来看看是哪一种,然后就可以通过递推公式在\(O(n)\)时间内求解更大规模的问题。 #### 验证算法 在编写复杂算法时,可先对小规模数据进行打表,然后将算法的输出与打表结果进行对比,以此验证算法的正确性。例如在实现一个复杂的图算法时,可先对节点数较少的图进行打表计算结果,再用算法处理相同的图,对比两者结果。 #### 直接使用表 对于一些问题,可将表直接嵌入到程序中。当输入的规模在打表范围内时,直接从表中获取结果,避免重复计算。例如在计算一些常见数学函数在小范围内的值时,可事先打好表,程序运行时直接查询。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值