专栏文章

P14337 [JOI2020 预选赛 R2] 求和 / Digit Sum

P14337题解参与者 1已保存评论 0

文章操作

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

当前评论
0 条
当前快照
1 份
快照标识符
@mingza9c
此快照首次捕获于
2025/12/02 02:15
3 个月前
此快照最后确认于
2025/12/02 02:15
3 个月前
查看原文
定义 fxf_x 为有多少个数经过若干次操作可以变成 xx,而我们的 fxf_x 没有算上 xx 本身(不进行操作的情况),因此最终答案为 fx+1f_x + 1
设一个数 aa 经过操作后可以得到数 bb,得到转移方程:fb=fb+fa+1f_b = f_b + f_a + 1。对于每个 bb,若其大于 nn,那么统计它也没有意义,可以加特判跳过。

代码:

CPP
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
const int N = 1e6 + 10;
int n;
int f[N];
inline int add(int k){
	int cnt = 0;
	while(k){
		cnt += k % 10;
		k /= 10;
	}
	return cnt;
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin >> n;
	for(int i = 1;i <= n;i ++){
		if(i + add(i) > n)continue;
		f[i + add(i)] += f[i] + 1;
	}
	cout << f[n] + 1;
	return 0; 
} 

评论

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

正在加载评论...