码迷,mamicode.com
首页 > 其他好文 > 详细

洛谷 2476 [SCOI2008]着色方案

时间:2018-04-05 22:08:52      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:数据   log   algo   dfs   AC   mod   one   isp   div   

技术分享图片

50%的数据满足:1 <= k <= 5, 1 <= ci <= 3

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

【题解】

  本题中ci很小,因此可以直接5维保存可以涂i块的油漆有多少种颜色。然后利用乘法原理进行DP

  

技术分享图片
 1 #include<cstdio>
 2 #include<algorithm>
 3 #define LL long long
 4 #define rg register
 5 #define N 16
 6 #define Mod (1000000007)
 7 using namespace std;
 8 LL f[N][N][N][N][N][6];
 9 bool v[N][N][N][N][N][6];
10 int n,cnt[6];
11 inline int read(){
12     int k=0,f=1; char c=getchar();
13     while(c<0||c>9)c==-&&(f=-1),c=getchar();
14     while(0<=c&&c<=9)k=k*10+c-0,c=getchar();
15     return k*f;
16 }
17 LL dfs(int a,int b,int c,int d,int e,int last){
18     if(v[a][b][c][d][e][last]) return f[a][b][c][d][e][last];
19     if(a+b+c+d+e==0) return 1;
20     LL tmp=0;
21     if(a) tmp+=(a-(last==2))*dfs(a-1,b,c,d,e,1);
22     if(b) tmp+=(b-(last==3))*dfs(a+1,b-1,c,d,e,2);
23     if(c) tmp+=(c-(last==4))*dfs(a,b+1,c-1,d,e,3);
24     if(d) tmp+=(d-(last==5))*dfs(a,b,c+1,d-1,e,4);
25     if(e) tmp+=e*dfs(a,b,c,d+1,e-1,5);
26     v[a][b][c][d][e][last]=1;
27     return f[a][b][c][d][e][last]=(tmp%Mod);
28 }
29 int main(){
30     n=read();
31     for(rg int i=1;i<=n;i++){
32         int x=read();
33         cnt[x]++;
34     }
35     printf("%lld\n",dfs(cnt[1],cnt[2],cnt[3],cnt[4],cnt[5],0));
36     return 0;
37 }
View Code

 

洛谷 2476 [SCOI2008]着色方案

标签:数据   log   algo   dfs   AC   mod   one   isp   div   

原文地址:https://www.cnblogs.com/DriverLao/p/8724370.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!