专栏文章

题解:P1028 [NOIP 2001 普及组] 数的计算

P1028题解参与者 14已保存评论 16

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
15 条
当前快照
1 份
快照标识符
@miq4xceo
此快照首次捕获于
2025/12/03 23:01
3 个月前
此快照最后确认于
2025/12/03 23:01
3 个月前
查看原文
一道水题,本蒟蒻来交一篇递推的题解。
我们可以设 cnticnt_{i} 为以 ii 为第一个数时所能构造的合法数列的数量,最后的 cntncnt_{n} 就是答案总数。
那么怎么求 cnticnt_{i} 呢?我们只需让
cnti=j=1i/2cntjcnt_{i} = \sum_{j = 1} ^ {i / 2} cnt_{j}
就可以一步一步推导出来啦!
AC Code:
CPP
#include <iostream>
using namespace std;
int n, cnt[299999];

int main(){
	cin >> n;
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= i / 2; j++) cnt[i] += cnt[j];       //累加cnt[1]~cnt[i / 2]
		cnt[i]++;       //不要忘了加上自己
	}
	cout << cnt[n] << ' ';
	return 0;
}
蒟蒻的第一篇题解,望管理员大大通过qwq。

评论

16 条评论,欢迎与作者交流。

正在加载评论...