标签:sizeof inpu style algorithm div output out 整数 string
15 16 19 20 0Sample Output
15 1896 16 5160 19 32757 20 59984
这个题蓝桥杯省赛好像遇到过,说起蓝桥杯就心塞,连续
两年都去北京打了酱油23333
这题 n<=24 ,直接打表,把1-24的情况直接打出来,然后输出就行了。
因为每一行都是根据上面一行得到的,所以把第一行的所有情况都枚举出来,
分别计算是否符合要求。
#include<stdio.h> #include<algorithm> #include<iostream> #include<string.h> using namespace std; int m[30][30]; int s,f,t; void bfs(int i) { if(i==0) { int s1=0,s2=0; for(int j=1;j<=t;j++) { if(m[0][j]==1) s1++; else s2++; } for(int j=1;j<t;j++) { for(int l=1;l<=t-j;l++) { if(m[j-1][l]==m[j-1][l+1]) { m[j][l]=1; s1++; } else { m[j][l]=0; s2++; } if(s1>s||s2>s) return; } } if(s1==s2) f++; return; } m[0][i]=0; bfs(i-1); m[0][i]=1; bfs(i-1); } int main() { int a[25]={0}; for(int i=1;i<=24;i++) { if(i*(i+1)%4==0) a[i]=-1; } /* a[3]=4; a[4]=6; a[7]=12; a[8]=40; a[11]=171; a[12]=410; a[15]=1896; a[16]=5160; a[19]=32757; a[20]=59984; a[23]=431095; a[24]=822229;*/ int n; /* while(1) { scanf("%d",&n); if(n==0) break; printf("%d %d\n",n,a[n]); }*/ for(int i=1;i<=24;i++) { if(a[i]==-1) { printf("%d ",i); f=0; s=i*(i+1)/4; t=i; memset(m,-1,sizeof(m)); bfs(i); printf("%d\n",f); } } return 0; }
标签:sizeof inpu style algorithm div output out 整数 string
原文地址:http://www.cnblogs.com/xzxj/p/7236206.html