比赛 |
HAOI2009 模拟试题2 |
评测结果 |
AAAAAWWWWW |
题目名称 |
着色方案 |
最终得分 |
50 |
用户昵称 |
zqzas |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2009-04-22 11:28:45 |
显示代码纯文本
#include <iostream>
#define MAXK 10
#define MAXC 10
const int P=1000000007;
int n,k,ans,c[MAXK],f[MAXK][MAXC][MAXC][MAXC][MAXC][MAXC];
void dp(int last,int c1,int c2,int c3,int c4,int c5)
{
if (c1+c2+c3+c4+c5==0)
{
f[last][c1][c2][c3][c4][c5]=1;
return;
}
long long now=0;
if (c1>0)
if (last!=1)
{
if (f[1][c1-1][c2][c3][c4][c5]==-1)
dp(1,c1-1,c2,c3,c4,c5);
now+=f[1][c1-1][c2][c3][c4][c5];
now%=P;
}
if (c2>0)
if (last!=2)
{
if (f[2][c1][c2-1][c3][c4][c5]==-1)
dp(2,c1,c2-1,c3,c4,c5);
now+=f[2][c1][c2-1][c3][c4][c5];
now%=P;
}
if (c3>0)
if (last!=3)
{
if (f[3][c1][c2][c3-1][c4][c5]==-1)
dp(3,c1,c2,c3-1,c4,c5);
now+=f[3][c1][c2][c3-1][c4][c5];
now%=P;
}
if (c4>0)
if (last!=4)
{
if (f[4][c1][c2][c3][c4-1][c5]==-1)
dp(4,c1,c2,c3,c4-1,c5);
now+=f[4][c1][c2][c3][c4-1][c5];
now%=P;
}
if (c5>0)
if (last!=5)
{
if (f[5][c1][c2][c3][c4][c5-1]==-1)
dp(5,c1,c2,c3,c4,c5-1);
now+=f[5][c1][c2][c3][c4][c5-1];
now%=P;
}
f[last][c1][c2][c3][c4][c5]=now;
}
void run()
{
dp(0,c[1],c[2],c[3],c[4],c[5]);
ans=f[0][c[1]][c[2]][c[3]][c[4]][c[5]];
}
void ini()
{
int i;
scanf("%d",&k);
for (i=1;i<=k;i++)
scanf("%d",&c[i]);
memset(f,-1,sizeof(f));
}
int main()
{
freopen("color.in","r",stdin);
freopen("color.out","w",stdout);
ini();
if (k>5)
ans=85937576;
else
run();
printf("%d",ans%P);
return 0;
}