符号三角形

C - 符号三角形
符号三角形的 第1行有n个由“+”和”-“组成的符号 ,以后每行符号比上行少1个,2个同号下面是”+“,2个异 号下面是”-“ 。计算有多少个不同的符号三角形,使其所含”+“ 和”-“ 的个数相同 。 n=7时的1个符号三角形如下:

Input
每行1个正整数n <=24,n=0退出.
Output
n和符号三角形的个数.
Sample Input
15
16
19
20
0
Sample Output
15 1896
16 5160
19 32757
20 59984

直接搜索的话会超时
dfs代码
#include
using namespace std;
int a[25]={0};//存储n层时满足情况的种类数
int b[25][25];
int n;
int ans=0;
void dfs(int n){
if(n>24)
return ;
for(int i=0;i<=1;i++)//0 和 1 分别代表±
{
b[1][n]=i;
ans+=i;
for(int j=2;j<=n;j++){
b[j][n-j+1]=b[j-1][n-j+1]^b[j-1][n-j+2];
ans+=b[j][n-j+1];
}
if(ans2==n(n+1)/2) a[n]++;
dfs(n+1);
ans-=i;
for(int j=2;j<=n;j++){
ans-=b[j][n-j+1];
}
}
return ;
}
/* run this program using the console pauser or add your own getch, system(“pause”) or input loop */

int main(int argc, char** argv) {
dfs(1);//参数是层数
//打表记录
while(cin>>n&&n){
if(n*(n+1)%2==1){
cout<<“NO”<<endl;
continue;
}
else{
cout<<a[n]<<endl;
}
}
return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42710001/article/details/83212677