题意理解
这题想写出一个应付小数据范围的代码还是很简单了,想要应付大范围的可能就需要稍微加点优化了。首先这个数据范围可能会超过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,这是我设置的一道很低的门槛用来阻止广告的。入群的验证暗号是:我爱编译原理