第十二届蓝桥杯 ——游戏
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多分钟🙄
以上是关于第十二届蓝桥杯 ——游戏的主要内容,如果未能解决你的问题,请参考以下文章
2021年软件类第十二届蓝桥杯 省赛 python组 A-E题解