zzzyc

导航

[SCOI2008]着色方案

这个题。。。我截图截了两遍。。。为啥嘞?第一遍没截数据范围。。。

仔细思考过这个题的人都应该知道了。。。这个题要从数据 ci<=5 做文章

思路不是很好解释。。。

emm。。。看代码参悟一下应该就可以了。。。

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
#define mo 1000000007
using 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<<dp(t[1],t[2],t[3],t[4],t[5],0)%mo;
}
呆码

 

posted on 2018-05-07 18:29  zzzyc  阅读(121)  评论(0编辑  收藏  举报