CF908G New Year and Original Order 數位DP
阿新 • • 發佈:2020-07-13
數位 DP.
code:
#include <cstdio> #include <cstring> #include <algorithm> #define N 703 #define ll long long #define mod 1000000007 #define setIO(s) freopen(s".in","r",stdin) using namespace std; char str[N]; int n,a[N],f[N][N][10][2]; int main() { // setIO("input"); scanf("%s",str+1),n=strlen(str+1); for(int i=1;i<=n;++i) a[i]=str[i]-'0'; for(int i=1;i<=9;++i) f[0][0][i][0]=1; for(int i=0;i<n;++i) { for(int k=1;k<=9;++k) { for(int j=0;j<=i;++j) { for(int l=0;l<2;++l) { int lim=l?9:a[i+1]; for(int p=0;p<=lim;++p) { (f[i+1][j+(p>=k)][k][l|(p<a[i+1])]+=f[i][j][k][l])%=mod; } } } } } int ans=0; for(int k=1;k<=9;++k) { int re=1; for(int i=1;i<=n;++i) { (ans+=(ll)re*(f[n][i][k][0]+f[n][i][k][1])%mod)%=mod; re=(ll)((ll)re*10%mod+1)%mod; } } printf("%d\n",ans); return 0; }