HDU2510 符号三角形 DFS直接打表

Problem Description

符号三角形的 第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

这道题本来是尝试找规律的,找了4个,发现应该是没有规律的,网上看了一下, 说是可以打表,哈哈,打表的题目我还没有做过,就做了,挺好玩的。

打表,就是DFS (或其他方式) 找出所有情况,看哪些情况符合题意的要求,就记录下来,用一个数组存储,然后在程序中直接就把数组写上去了,挺爽的。

我的打表程序:

 1 #include<cstdio>
 2 #include<cstring>
 3 const int maxn=28;
 4 int a[maxn][maxn];
 5 int n;
 6 int ans,add,sub;
 7 void DFS(int cnt)
 8 {
 9     if(cnt==n+1)
10     {
11         for(int i=n-1;i>0;i--)
12         {
13             for(int j=1;j<=i;j++)
14             {
15                 a[i][j]=a[i+1][j]^a[i+1][j+1];
16             }
17         }
18         sub=add=0;
19         for(int i=1;i<=n;i++)
20         {
21             for(int j=1;j<=i;j++)
22                 if(a[i][j]==1)
23                     sub++;
24                 else
25                     add++;
26         }
27         if(add==sub)
28             ans++;
29         return ;
30     }
31     for(int i=0;i<=1;i++)
32     {
33         a[n][cnt]=i;
34         DFS(cnt+1);
35     }
36 }
37 int main()
38 {
39     while(scanf("%d",&n))
40     {
41         memset(a,-1,sizeof(a));
42         ans=0;
43         DFS(1);
44         printf("%d\n",ans);
45     }
46     return 0;
47 }

我的打表代码

 1 #include<cstdio>
 2 int a[25]={0,0,0,4,6,0,0,12,40,0,0,171,410,0,0,1896,5160,0,0,32757,59984,
 3             0,0,431095,822229};
 4 int main()
 5 {
 6     int n;
 7     while(scanf("%d",&n))
 8     {
 9         if(n==0)
10             break;
11         printf("%d %d\n",n,a[n]);
12     }
13     return 0;
14 }

我的提交代码

时间: 2024-10-11 20:34:02

HDU2510 符号三角形 DFS直接打表的相关文章

符号三角形(hdu 2510 搜索+打表)

符号三角形 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1246    Accepted Submission(s): 664 Problem Description 符号三角形的 第1行有n个由“+”和”-“组成的符号 ,以后每行符号比上行少1个,2个同号下面是”+“,2个异 号下面是”-“ .计算有多少个不同的符号三角形,使其所含

HDU 2510 符号三角形 NYOJ491 幸运三角形

符号三角形 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 860    Accepted Submission(s): 437 Problem Description 符号三角形的 第1行有n个由"+"和"-"组成的符号 ,以后每行符号比上行少1个,2个同号下面是"+",2个异 号下面

符号三角形

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

回溯法--符号三角形问题

问题描述: 如下图是由14个“+”和14个“-”组成的符号三角形, 2个同号下面都是“+”,2个异号下面都是“-”. - + + - + + +   - + - - + +    - - + - +     + - - -      - + +       - +        - 在一般情况下,符号三角形的第一行有n个符号, 符号三角形问题要求对于给定的n, 计算有多少个不同的符号三角形,使其所含的“+”和“-”的个数相同.  解题思路: 1.不断改变第一行每个符号,搜索符合条件的解,可以使用

回溯法之符号三角形问题

/*回溯法解符号三角形问题 问题描述: 如下图是由14个“+”和14个“-”组成的符号三角形, 2个同号下面都是“+”,2个异号下面都是“-”. - + + - + + + - + - - + + - - + - + + - - - - + + - + - 在一般情况下,符号三角形的第一行有n个符号, 符号三角形问题要求对于给定的n, 计算有多少个不同的符号三角形,使其所含的“+”和“-”的个数相同. 解题思路: 1.不断改变第一行每个符号,搜索符合条件的解,可以使用递归回溯 为了便于运算,设+

HDU 2510 - 符号三角形

DFS后打表 1 #include <iostream> 2 using namespace std; 3 int s[] ={0,0,0,4,6,0,0,12,40,0,0,171,410,0,0,1896,5160,0,0,32757,59984,0,0,431095,822229}; 4 int main() 5 { 6 int n; 7 while(~scanf("%d",&n)&n) 8 { 9 printf("%d %d\n"

zstu.4191: 无向图找环(dfs树 + 邻接表)

4191: 无向图找环 Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 117  Solved: 34 Description 给你一副无向图,每条边有边权,保证图联通,现在让你判断这个图是否有异或值大于零的环存在. Input 多组测试数据,每组先输入两个数n m,表示图的点跟边的数量. 然后是m行,每行三个数a b c.代表一条边的起点,终点,边权. 1 <= n<= 100000, 1 <= m <= 200000. 1 <

hdu1016 Prime Ring Problem dfs 素数打表

意思是给你一个数n,要构成一个素数环,这个素数由1-n组成,它的特征是选中环上的任意一个数字i,i与它相连的两个数加起来都分别为素数,满足就输出. 这个题的做法和hdu1015做法差不多都是使用dfs 回溯.不同之处在于这个要全部搜索,而hdu1015只需要搜索第一组就可以. 其次在这个题目中使用素数打表的方式简化素数判定,在一定情况下也是对效率有所提高的. Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limi

HTML5(二)——特殊符号、新增属性、表单重写属性、

一.HTML5 特殊符号 &nbsp :空格 &gt:大于号 > &It :小于号 < &quot :引号" &copy:"版权符号 @ 二.HTML 新增属性 1.contentEditable 规定是否可编辑元素的内容属性值:true -----可以编辑元素的内容false -----无法编辑元素的内容inherit -----继承父元素的contenteditable属性当为空字符串时,效果和true一致.当一个元素的conte