[CF509C]Sums of Digits

Sums of Digits

题解

由于要求a_{i}逐次递增,所以只要求出比a_{i-1}大的第一个满足条件的数即可。

首先确定数字位数,通过一个全为9的数即可找到当前位数时,由于数位和是连续的,所以区间中一定有数满足条件,注意许判断是否大于上一个数,然后通过数位dp枚举即可。

源码

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int,int> pii;
int n,a[505],s[505],t[505],len;
void calc(int x,int l){
	memset(s,0,sizeof(s));len=0;x--;s[l]=1;
	while(x>=9&&len<l)s[++len]=9,x-=9;
	if(x)s[++len]+=x;len=l;
}
void print(){for(int i=len;i>0;i--)printf("%d",s[i]);puts("");}
bool c
posted @ 2020-08-11 17:22  StaroForgin  阅读(6)  评论(0)    收藏  举报  来源