tkj
文章143
标签102
分类0
bzoj 1079: [SCOI2008]着色方案

bzoj 1079: [SCOI2008]着色方案

.

大暴力

#include<bits/stdc++.h>
using namespace std;
int n,a[6];
long long f[16][16][16][16][16][16];
const int mod=1000000007;
bool tf[16][16][16][16][16][16];
long long dp(int a,int b,int c,int d,int e,int k)
{
    if((a|b|c|d|e)==0)
    return 1;
    if(tf[a][b][c][d][e][k])
    return f[a][b][c][d][e][k];
    tf[a][b][c][d][e][k]=1;
    if(a)
    f[a][b][c][d][e][k]=(f[a][b][c][d][e][k]+(a-(k==2))*dp(a-1,b,c,d,e,1))%mod;
    if(b)
    f[a][b][c][d][e][k]=(f[a][b][c][d][e][k]+(b-(k==3))*dp(a+1,b-1,c,d,e,2))%mod;
    if(c)
    f[a][b][c][d][e][k]=(f[a][b][c][d][e][k]+(c-(k==4))*dp(a,b+1,c-1,d,e,3))%mod;
    if(d)
    f[a][b][c][d][e][k]=(f[a][b][c][d][e][k]+(d-(k==5))*dp(a,b,c+1,d-1,e,4))%mod;
    if(e)
    f[a][b][c][d][e][k]=(f[a][b][c][d][e][k]+e*dp(a,b,c,d+1,e-1,5))%mod;
    return f[a][b][c][d][e][k];
}
int main()
{
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        int x;
        scanf("%d",&x);
        a[x]++;
    }
    printf("%lld\n",dp(a[1],a[2],a[3],a[4],a[5],0));
}
本文作者:tkj
本文链接:https://tkj666.github.io/7/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可