暴搜与记忆化搜索

这里的暴搜模板有一点动态规划的意思,在求解完成任务的方法数上尤为好用。记忆化就是简单地用二维数组记录该点是否被搜过,保存搜的结果。
建议记忆数组初始化为-1,避免结果为0时会误以为没有搜过。例为洛谷P1057

#include<bits/stdc++.h>
using namespace std;

int n, m; int f[31][31];
int bp(int s, int k)
{
	if (k == m)
	{
		f[s][k]=s == 1 ? 1 : 0;
		return f[s][k];
	}
	if (f[s][k]!=-1)return f[s][k];
	f[s][k] = bp(s % n + 1, k + 1) + bp(s - 1 > 0 ? s - 1 : n, k + 1);
	return f[s][k];
}

int main()
{
	memset(f, -1, sizeof(f));
	cin >> n >> m;
	cout<<bp(1, 0)<<endl;
	return 0;
}
posted @ 2024-08-24 09:23  邓佑孤  阅读(15)  评论(0)    收藏  举报