2603: 2012世界末日
Result | TIME Limit | MEMORY Limit | Run Times | AC Times | JUDGE |
---|---|---|---|---|---|
![]() | 10s | 65536K | 202 | 73 | Standard |
种种迹象表明,公元2012年为世界末日,而科学家们进一步预测,人类将被一种神秘的时空机器送到另一个宇宙,所以不要害怕,我们只是搬了个新家而已~
每一次改变都是一种进步,这个新的世界并不像我们的地球,不再有南方北方(不倒翁已为此头疼很久),不再有贫富贵贱,人们也不会再因为自己的长像头疼,因为同性别的人都变成了一个模样。当然,最大的不同是,人们发现这个世上的人并不只有男和女两种性别,性别种数变得不确定(想必找工作不会再有性别歧视了,大男子小女子的说法也将不复存在),还好人们保持了同性互斥,异性相吸的特性,只有不同性别的人才愿意走在一起。
十年后的一天,jlu的Boss:Dr.Lee想请ACM校队的成员一起吃个饭,注意这些成员的性别可能都已变化。可以肯定的是,校队的人数不会超过12,性别数不会超过10。Dr.Lee家里有一张长长的沙发,洽好能坐下所有学生(Dr.Lee一直在忙着做饭),JLU_ACMes都还正常,当然都希望坐在自己身边的人与自己不同性别。Dr.Lee是个数学爱好者,他很想知道一共有多少种坐法能够让自己的学生们都满意?但他意识到可能的种数会很多,想求助2009级的ACMer们~
现在已知这次参加聚餐的ACMers共有n种性别,每种性别的人数也已知,你的任务是,输出共有多少种入坐方案,使得相邻的ACMers异性。
例如: 3种性别时,有1个人性别是1,两个人性别是2,三个人性别是3,则共有以下10种方案:
1 3 2 3 2 32 3 1 3 2 3
2 3 2 3 1 3
3 1 2 3 2 3
3 1 3 2 3 2
3 2 1 3 2 3
3 2 3 1 2 3
3 2 3 1 3 2
3 2 3 2 1 3
3 2 3 2 3 1
Input
每行第一个数是ACMers的性别种数n(n<=10),接着的n个数分别表示各种性别ACMer的人数(总人数不超过12)。
Output
满足题设要求的方案数。
Sample Input
3 1 2 3
Sample Output
10
Problem Source: SongLijun
This problem is used for contest: 140 150
#include<stdio.h>
int a[20],n,total_people;
int max;
void dfs(int id,int step)
{
int i;
if(id>total_people)
{
max++;
return ;
}
for(i=1;i<=n;i++)
{
if(a[i]&&i!=step)
{
a[i]--;
dfs(id+1,i);
a[i]++;
}
}
}
int main()
{
int i;
while(scanf("%d",&n)==1)
{
total_people=0;
for(i=1;i<=n;i++) {scanf("%d",&a[i]);total_people+=a[i];}
max=0;
dfs(1,0);
printf("%d/n",max);
}
return 0;
}