专栏文章
题解:P1028 [NOIP 2001 普及组] 数的计算
P1028题解参与者 12已保存评论 12
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 12 条
- 当前快照
- 1 份
- 快照标识符
- @miq67r9a
- 此快照首次捕获于
- 2025/12/03 23:37 3 个月前
- 此快照最后确认于
- 2025/12/03 23:37 3 个月前
设 表示当 时的答案,则 (因为 时,序列的第一个数为 ),初始时 。
直接循环递推求解是 的,虽然可以通过本题,我们考虑优化。
设 ,则转移为 即可,这样做时间复杂度是 的。
CPP#include<iostream>
#include<algorithm>
const int sz=1010;
int f[sz],g[sz];
int main(){
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int n;
std::cin>>n;
f[1]=g[1]=1;
for(int i=2;i<=n;i++)f[i]=g[i/2]+1,g[i]=g[i-1]+f[i];
std::cout<<f[n]<<"\n";
return 0;
}
相关推荐
评论
共 12 条评论,欢迎与作者交流。
正在加载评论...