本文主要是介绍HDU 2510 符号三角形 深搜打表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意:符号三角形的 第1行有n个由“+”和”-“组成的符号 ,以后每行符号比上行少1个,2个同号下面是”+“,2个异 号下面是”-“ 。计算有多少个不同的符号三角形,使其所含”+“ 和”-“ 的个数相同 。 n=7时的1个符号三角形如下:
+ + - + - + +
+ - - - - +
- + + + -
- + + -
- + -
- -
+
+ + - + - + +
+ - - - - +
- + + + -
- + + -
- + -
- -
+
想法:枚举第一排的情况,下面的情况就都清楚了,普通dfs。
#include<iostream>
#include<cstring>
using namespace std;
//int res[30],k[50][50];
//int cnt;
/*void dfs(int num)
{if(num>24) return; for(int i=0;i<=1;i++){k[1][num]=i;cnt+=i;for(int j=2;j<=num;j++){k[j][num-j+1]=k[j-1][num-j+1]^k[j-1][num-j+2];//因为num是一层一层叠加的,这时的表中的每一个内层在之前都是外层。*************cnt+=k[j][num-j+1];}if(cnt*2==(num+1)*num/2) res[num]++;dfs(num+1);cnt-=i;for(int j=2;j<=num;j++){cnt-=k[j][num-j+1];}}
}*/
int main()
{//memset(res,0,sizeof(res));//cnt=0;//dfs(1);int n;int kk[24]={0,0,4,6,0,0,12,40,0,0,171,410,0,0,1896,5160,0,0,32757,59984,0,0,431095,822229}; while(cin>>n,n){cout<<n<<" "<<kk[n-1]<<endl;}return 0;
}
这篇关于HDU 2510 符号三角形 深搜打表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!