[cf908G]New Year and Original Order

Posted pywbktda

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[cf908G]New Year and Original Order相关的知识,希望对你有一定的参考价值。

定义状态f[i][j][k][x]表示有多少个i位数t有j位大于x,k位等于x,然而复杂度无法接受,发现可以改变状态为f[i][j][x]表示前i为有j个数字大于等于x的方案数,就可以快速转移了

技术图片
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define mod 1000000007
 4 int n,ans,f[1005][1005][11][2];
 5 char s[1005];
 6 int main()
 7     scanf("%s",s);
 8     n=strlen(s);
 9     for(int i=0;i<10;i++)f[0][0][i][0]=1;
10     for(int i=0;i<n;i++)
11         int p=(s[i]-0); 
12         for(int j=0;j<=i;j++)
13             for(int k=0;k<10;k++)
14                 for(int l=0;l<2;l++)
15                     for(int t=0;t<=max(p,9*l);t++)
16                         f[i+1][j+(k<=t)][k][l|(t<p)]+=f[i][j][k][l];
17                         f[i+1][j+(k<=t)][k][l|(t<p)]%=mod;
18                     
19     
20     for(int i=1,s=0;i<=n;i++)
21         s=(10LL*s+1)%mod;
22         for(int j=1;j<10;j++)
23             for(int k=0;k<2;k++)ans=(ans+1LL*s*f[n][i][j][k])%mod; 
24     
25     printf("%d",ans); 
26 
View Code

 

以上是关于[cf908G]New Year and Original Order的主要内容,如果未能解决你的问题,请参考以下文章

CF908GNew Year and Original Order 数位DP

CF 750C New Year and Rating(思维题)

CF1284E New Year and Castle Construction

CF1284E New Year and Castle Construction

CF1279F New Year and Handle Change 题解

CF611H New Year and Forgotten Tree