zoukankan      html  css  js  c++  java
  • BZOJ1079 SCOI2008 着色方案

    BZOJ1079 SCOI2008 着色方案

    Description

    有n个木块排成一行,从左到右依次编号为1~n。你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块。
    所有油漆刚好足够涂满所有木块,即c1+c2+...+ck=n。相邻两个木块涂相同色显得很难看,所以你希望统计任意两
    个相邻木块颜色不同的着色方案。

    Input Format

    第一行为一个正整数k,第二行包含k个整数c1, c2, ... , ck。

    Output Format

    输出一个整数,即方案总数模1,000,000,007的结果。

    Sample Input

    3
    1 2 3

    Sample Output

    10

    Hint

    100%的数据满足:1 <= k <= 15, 1 <= ci <= 5

    Solution

    想了挺久的排列组合没想出来,最后看题解才发现是记忆话搜索。。。

    (f(a,b,c,d,e,last))表示剩余个数为(1,2,3,4,5)的油漆分别有(a,b,c,d,e)种,上一个木块用的颜料剩余(last)个时涂完所有颜料的方案数。
    转移就是枚举当前这格用剩余个数为多少的颜料,如果剩余个数与上个木块用的颜料的剩余个数相同就把系数减一。

    [f(a,b,c,d,e,last)=egin{array}{cc}\ \ \ \ (a-[last==1])*f(a-1,b,c,d,e,0)\+(b-[last==2])*f(a+1,b-1,c,d,e,1) \+(c-[last==3])*f(a,b+1,c-1,d,e,2)\+(d-[last==4])*f(a,b,c+1,d-1,e,3)\+(e-[last==5])*f(a,b,c,d+1,e-1,4) end{array} ]

    Code

    #include<cstdio>
    #include<algorithm>
    #define LL long long
    
    const LL mod=1000000007;
    int n,c,num[6];
    LL f[16][16][16][16][16][16];
    
    inline LL dfs(int a,int b,int c,int d,int e,int last){
    	if (a<0||b<0||c<0||d<0||e<0) return 0;
    	if (a+b+c+d+e==0) return 1;
    	LL &T=f[a][b][c][d][e][last];
    	if (T) return T;
    	//1
    	T=T+(a-(last==1))*dfs(a-1,b,c,d,e,0)%mod;
    	T%=mod;
    	//2
    	T=T+(b-(last==2))*dfs(a+1,b-1,c,d,e,1)%mod;
    	T%=mod;
    	//3
    	T=T+(c-(last==3))*dfs(a,b+1,c-1,d,e,2)%mod;
        T%=mod;
    	//4
    	T=T+(d-(last==4))*dfs(a,b,c+1,d-1,e,3)%mod;
    	T%=mod;
    	//5
    	T=T+(e-(last==5))*dfs(a,b,c,d+1,e-1,4)%mod;
    	T%=mod;
    	return T;
    }
    
    int main(){
    	scanf("%d",&n);
    	for (int i=1;i<=n;++i)
    	 scanf("%d",&c),++num[c];
    	printf("%lld",dfs(num[1],num[2],num[3],num[4],num[5],0));
    }
    
  • 相关阅读:
    误差可视化小结
    快速排序算法
    解决堆损坏的一点心得
    合并两个有序数组
    nginx安装
    Spark官方3 ---------Spark Streaming编程指南(1.5.0)
    【译】Yarn上常驻Spark-Streaming程序调优
    【Kafka】操作命令
    【Kafka】
    Spark组件
  • 原文地址:https://www.cnblogs.com/hyheng/p/7800543.html
Copyright © 2011-2022 走看看