2020牛客暑期多校训练营(第六场)——Harmony Pairs
题目描述
输入描述
The only line of input contains one integer N (1≤N≤10 100 ).
输出描述
Output one integer indicating the answer.
样例输入
100
样例输出
967
题目大意
题解
AC code
#include <bits/stdc++.h>
using namespace std;
const int N=110,mod=1e9+7;
int n,digit[N],dp[N][N*20][2][2];
char s[N];
int dfs(int x,int d,bool l,bool s)
{
bool f1,f2;
int ret=0,lim,ej;
if(!x)
return d>1000;
if(~dp[x][d][l][s])
return dp[x][d][l][s];
if(l)
lim=digit[x];
else lim=9;
for(int i=0;i<=lim;i++)
{
if(s)
ej=i;
else
ej=9;
for(int j=0;j<=ej;j++)
{
f1=0;
f2=0;
if(digit[x]==i)
f1=1;
if(i==j)
f2=1;
ret=(ret+dfs(x-1,d+j-i,l&f1,s&f2))%mod;
}
}
return dp[x][d][l][s]=ret;
}
int main()
{
memset(dp,-1,sizeof dp);
scanf("%s",s);
n=strlen(s);
for(int i=0;i<n;i++)
digit[n-i]=s[i]-'0';
printf("%d\n",dfs(n,1000,1,1));
}