如【图1.jpg】, 有12张连在一起的12生肖的邮票。
现在你要从中剪下5张来,要求必须是连着的。
(仅仅连接一个角不算相连)
比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。
请你计算,一共有多少种不同的剪取方法。
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
现在你要从中剪下5张来,要求必须是连着的。
(仅仅连接一个角不算相连)
比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。
请你计算,一共有多少种不同的剪取方法。
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
116
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int mp[12]= {1,2,3,4,6,7,8,9,11,12,13,14};
int aa[5];
bool vis[5];
int sum=0;
int bu[4]= {-1,1,-5,+5};
bool f;
void dfs(int x) {
for (int i=0;i<4;i++) {
int xx=aa[x]+bu[i];
if(xx<1 || xx>14 || xx==5 || xx==10) continue;
for (int j=0;j<5;j++) {
if (!vis[j] && aa[j]==xx) {
vis[j]=true;
dfs(j);
}
}
}
return;
}
int main()
{
for (int a=0;a<12;a++) {
for (int b=a+1;b<12;b++) {
for (int c=b+1;c<12;c++) {
for (int d=c+1;d<12;d++) {
for (int e=d+1;e<12;e++) {
aa[0]=mp[a];
aa[1]=mp[b];
aa[2]=mp[c];
aa[3]=mp[d];
aa[4]=mp[e];
memset(vis,false,sizeof(vis));
vis[0]=true;
dfs(0);
f=true;
for (int i=0;i<5;i++) {
if (!vis[i]) {
f=false;
break;
}
}
if (!f) continue;
else
sum++;
}
}
}
}
}
printf ("%d\n",sum);
return 0;
}