社区讨论

可以使用递归, 但要配合缓存

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 条回复,欢迎继续交流。

正在加载回复...