新手村 过程函数与递归 数的计算

来源:互联网 发布:苏亚雷斯实况巅峰数据 编辑:程序博客网 时间:2024/06/05 16:52

题目链接

题意理解

这题想写出一个应付小数据范围的代码还是很简单了,想要应付大范围的可能就需要稍微加点优化了。首先这个数据范围可能会超过int,其次,你不能说每次计算的时候都重复计算一遍,所以我加了一个记忆化搜索。

代码

#include <cstring>#include <iostream>#include <cmath>#include <stdio.h>#include <stdlib.h>#include <string>#include <iomanip>#include <vector>using namespace std;const int maxn = 1010;long long a[1010];long long calculate(int n) {    if(a[n]) {        return a[n];    }    long long sum = 0l;    for(int i = 1; i <= n / 2; i++) {        sum += calculate(i);    }    sum += 1;    a[n] = sum;    return sum;}int main() {    int n;    cin >> n;    memset(a, 0, sizeof a);    a[1] = 1;    a[2] = 2;    cout << calculate(n) << endl;}

欢迎加入“不会算法一群菜鸟”,群号是⑥⑥①⑨②2025,这是我设置的一道很低的门槛用来阻止广告的。入群的验证暗号是:我爱编译原理

原创粉丝点击