这个题。。。我截图截了两遍。。。为啥嘞?第一遍没截数据范围。。。
仔细思考过这个题的人都应该知道了。。。这个题要从数据 ci<=5 做文章
思路不是很好解释。。。
emm。。。看代码参悟一下应该就可以了。。。
#include#include #include #define ll long long#define mo 1000000007using namespace std;ll n,t[6],f[16][16][16][16][16][6],x;bool l[16][16][16][16][16][6];ll dp(int a,int b,int c,int d,int e,int k){ ll ans=0; if(l[a][b][c][d][e][k]) return f[a][b][c][d][e][k]; if(a+b+c+d+e==0) return 1; if(a!=0) ans+=(a-(k==2))*dp(a-1,b,c,d,e,1); if(b!=0) ans+=(b-(k==3))*dp(a+1,b-1,c,d,e,2); if(c!=0) ans+=(c-(k==4))*dp(a,b+1,c-1,d,e,3); if(d!=0) ans+=(d-(k==5))*dp(a,b,c+1,d-1,e,4); if(e!=0) ans+=(e)*dp(a,b,c,d+1,e-1,5); f[a][b][c][d][e][k]=ans%mo; l[a][b][c][d][e][k]=1; return f[a][b][c][d][e][k];}int main(){ scanf("%d",&n); memset(f,-1,sizeof(f)); for(int i=1;i<=n;i++) { scanf("%d",&x); t[x]++; } cout<