[8月16日绍兴]试剂
题目描述
输入
第一行两个正整数n,m
接下来一行n个正整数描述ai
输出
一个正整数,表示答案
样例输入
3 1000000007 1 2 3
样例输出
75
提示
发现同样大小的连乘块系数相同。对其DP
#include<bits/stdc++.h> #define LL long long #define N 3007 LL f[N][N],Dp[N],n,mo,x,ans; using namespace std; signed main () { scanf("%lld%lld",&n,&mo); f[1][0]=1; for (int i=1;i<=n;i++) for (int j=0;j< n;j++) { if (i==1&&j==0) continue; if (j) f[i][j]=(f[i][j]+f[i][j-1]*i%mo*j)%mo; if (j>1) f[i][j]=(f[i][j]+f[i][j-1]*j%mo*(j-1))%mo; if (i>1) f[i][j]=(f[i][j]+f[i-1][j]*(i*(i-1)/2))%mo; } Dp[0]=1; for (int i=1;i<=n;i++) { scanf("%lld",&x); for (int j=i;j;j--) Dp[j]=(Dp[j]+Dp[j-1]*x)%mo; } for (int i=1;i<=n;i++) ans=ans+Dp[i]*f[i][n-i]%mo; return printf("%lld\n",ans%mo),0; }