社区讨论
可以使用递归, 但要配合缓存
P1028[NOIP 2001 普及组] 数的计算参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @m027eoww
- 此快照首次捕获于
- 2024/08/20 17:09 2 年前
- 此快照最后确认于
- 2025/11/04 22:56 4 个月前
可以使用递归, 但要配合缓存。
每次调用递归函数的时候, 首先判断该参数是否已经计算过了。 相同的参数总是会得到相同的返回值。
CPP#include <bits/stdc++.h>
using namespace std;
std::vector<int64_t> v(1024, -1);
int64_t function1 (int max)
{
if(v[max]!=-1)
{
return v[max];
}
int64_t count = 0;
count += max;
for (int i = 1; i <= max; ++i)
{
int max2=i/2;
if(max2>0)
{
count += function1( max2 );
}
}
v[max]= count;
return count;
}
int main()
{
int n;
cin>>n;
int64_t count=0;
count = 1 + function1(n/2);
cout << count;
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...