Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
24641 yuanjiabao 【S】T2 C++ 运行超时 60 2001 MS 32748 KB 1376 2024-01-11 15:50:39

Tests(12/20):


#include<iostream> #include<vector> #include<algorithm> #include<cstring> #include<set> using namespace std; #define int long long const int N=1000010,P=1000000007; inline int fpow(int a,int b=P-2){ int c=1; for(;b;b>>=1,a=a*a%P)if(b&1)c=c*a%P; return c; } int n,m; int fac[N],ifac[N]; inline int c(int n,int m){ if(n<m||m<0)return 0; return fac[n]*ifac[m]%P*ifac[n-m]%P; } void init(){ fac[0]=1; for(int i=1;i<N;i++)fac[i]=fac[i-1]*i%P; ifac[N-1]=fpow(fac[N-1]); for(int i=N-1;i;i--)ifac[i-1]=ifac[i]*i%P; } const int M=600; int f[2][M][M],suf[2][M][M]; signed main(){ // freopen("read.in","r",stdin); // freopen("life.out","w",stdout); cin>>n>>m; init(); f[0][0][0]=1; int s=min(n,m*2); suf[0][0][0]=1; int ans=0; for(int i=1;i<=s;i++){ int res=0; for(int j=1;j<=i;j++){ for(int k=j;k;k--){ f[1][j][k]=(f[0][j-1][k-1]*(m-j+1)+suf[0][j][k+1])%P; suf[1][j][k]=(suf[1][j][k+1]+f[1][j][k])%P; res=(res+f[1][j][k])%P; } } memcpy(f[0],f[1],sizeof(f[0])); memcpy(suf[0],suf[1],sizeof(suf[0])); memset(f[1],0,sizeof(f[1])); memset(suf[1],0,sizeof(suf[1])); ans=(ans+res*c(n-1,i-1))%P; } cout<<ans; return 0; }


测评信息: