• bzoj 1079: [SCOI2008]着色方案【记忆化搜索】


    本来打算把每个颜色剩下的压起来存map来记忆化,写一半发现自己zz了
    考虑当前都能涂x次的油漆本质是一样的。
    直接存五个变量分别是剩下12345个格子的油漆数,然后直接开数组把这个和步数存起来,记忆化dfs即可

    #include<iostream>
    #include<cstdio>
    using namespace std;
    const int N=17,mod=1e9+7;
    int n,a[7];
    long long f[N][N][N][N][N][7];
    bool v[N][N][N][N][N][7];
    long long dfs(int a,int b,int c,int d,int e,int w)
    {
        if(v[a][b][c][d][e][w])
    		return f[a][b][c][d][e][w];
        if(a+b+c+d+e==0)
    		return 1;
        long long t=0;
        if(a)  
            t+=(a-(w==2))*dfs(a-1,b,c,d,e,1);  
        if(b)  
            t+=(b-(w==3))*dfs(a+1,b-1,c,d,e,2);  
        if(c)  
            t+=(c-(w==4))*dfs(a,b+1,c-1,d,e,3);  
        if(d)  
            t+=(d-(w==5))*dfs(a,b,c+1,d-1,e,4);  
        if(e)  
            t+=e*dfs(a,b,c,d+1,e-1,5);  
        v[a][b][c][d][e][w]=1;
        return f[a][b][c][d][e][w]=(t%mod);
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=1,x;i<=n;i++)
        {
    		scanf("%d",&x);
    		a[x]++;
    	}
        printf("%lld
    ",dfs(a[1],a[2],a[3],a[4],a[5],0));
        return 0;
    }
    
  • 相关阅读:
    js中使用EL表达式
    洛谷——RMQ
    模板——RMQ
    洛谷——图论
    洛谷——基础搜索
    洛谷——搜索
    搭桥
    简单dp
    Codevs 3194 基因变异
    cin、scanf、gets、getchar 用法介绍
  • 原文地址:https://www.cnblogs.com/lokiii/p/9606235.html
Copyright © 2020-2023  润新知