第十二届蓝桥杯 ——游戏

Posted 业余算法学徒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十二届蓝桥杯 ——游戏相关的知识,希望对你有一定的参考价值。

问题描述
小蓝闲着无聊开始自己和自己做游戏。

  • 首先规定一个正整数 n。

  • 他首先在纸上写下一个 1 到 n 之间的数。

  • 在之后的每一步,小蓝都可以选择上次写的数的一个约数(不能选上一个写过的数),写在纸上。

  • 直到最终小蓝写下 1。

小蓝可能有多种游戏的方案。

例如,当 n = 6 时,小蓝有 9 种方案:(1), (2, 1), (3, 1), (4, 1), (4, 2, 1), (5, 1), (6, 1), (6, 2, 1), (6, 3, 1)。

请问,当 n = 20210509 时有多少种方案?

答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

本题的答案比较大,如果你编程解决本题,请注意使用合适的数据类型。


答案:1352184317599


题解
记忆化搜索:

#include <iostream>
#include <cstring>
using namespace std;

typedef long long LL;

LL f[20210510];

LL dfs(int n)
{
	if(f[n] != -1) return f[n];
	if(n == 1) return 1;
	
	f[n] = 0;
	for (int i = 1; i <= n / i; i ++)
		if(n % i == 0)
		{
			f[n] += dfs(i);
			if(n / i != i && n / i < n) f[n] += dfs(n / i);
		}
		
	return f[n];
}

int main()
{
	LL ans = 0;
	memset(f, -1, sizeof f);
	
	for (int i = 1; i <= 20210509; i ++)
		ans += dfs(i);

	cout << ans << endl;
	return 0;
}

ps:要运行30多分钟🙄


蓝桥杯C/C++组省赛历年题

以上是关于第十二届蓝桥杯 ——游戏的主要内容,如果未能解决你的问题,请参考以下文章

2021年软件类第十二届蓝桥杯 省赛 python组 A-E题解

第十二届蓝桥杯单片机省赛程序设计总结

第十二届蓝桥杯单片机省赛程序设计总结

蓝桥杯单片机——第十二届蓝桥杯单片机第一场省赛

2021年软件类第十二届蓝桥杯 省赛 python组 F-J题解

《蓝桥杯真题》:2.第十二届省赛