zoukankan      html  css  js  c++  java
  • BZOJ 1079 着色方案

    本来只会压位。。。看了黄学长的题解恍然大悟。。。同样数量的颜色本质上是相同的啊。。。

    然后就从5^15变成15^5就可以做了。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define mod 1000000007
    using namespace std;
    long long k,cnt[6],c[20],dp[6][16][16][16][16][16];
    long long dfs(long long x,long long a,long long b,long long c,long long d,long long e)
    {
        if (dp[x][a][b][c][d][e]) return dp[x][a][b][c][d][e];
        long long ret=0;
        if (a) ret=(ret+(a-(x==2))*dfs(1,a-1,b,c,d,e)%mod)%mod;
        if (b) ret=(ret+(b-(x==3))*dfs(2,a+1,b-1,c,d,e)%mod)%mod;
        if (c) ret=(ret+(c-(x==4))*dfs(3,a,b+1,c-1,d,e)%mod)%mod;
        if (d) ret=(ret+(d-(x==5))*dfs(4,a,b,c+1,d-1,e)%mod)%mod;
        if (e) ret=(ret+e*dfs(5,a,b,c,d+1,e-1)%mod)%mod;
        dp[x][a][b][c][d][e]=ret;
        return ret;
    }
    int main()
    {
        scanf("%lld",&k);
        for (long long i=1;i<=k;i++)
        {
            scanf("%lld",&c[i]);
            cnt[c[i]]++;
        }
        for (int i=1;i<=5;i++) dp[i][0][0][0][0][0]=1;
        printf("%lld
    ",dfs(0,cnt[1],cnt[2],cnt[3],cnt[4],cnt[5]));
        return 0;
    }
  • 相关阅读:
    Oracle 多表查询优化
    FZU 2150 Fire Game
    HDU 1058 Humble Numbers
    UVA 11624 Fire!
    POJ 1321 棋盘问题
    线性表的基本操作
    POJ 3414 Pots(广搜输出路径)
    HDU 1495 非常可乐
    POJ 1847 Tram
    POJ 3159 Candies(查分约束)
  • 原文地址:https://www.cnblogs.com/ziliuziliu/p/6015404.html
Copyright © 2011-2022 走看看