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

符号三角形

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 811    Accepted Submission(s): 403


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
 

 

Source
 

 

Recommend
lcy   |   We have carefully selected several similar problems for you:  2512 2515 2509 2517 2514 
 

 

这题还比较好吧,开始写了代码发现一定会超时,后来看了别人的解法再想想,可以打表解决,小菜的dfs一般,解24时要好几分钟...

还有题目加减号的情况和异或一样,于是用01表示方便计算。

 

#include<stdio.h>
#include<string.h>
int n,cnt,m;
int c[50];
int judge(int c0[])
{
    int cc=0;
    int s[50];
    for(int i=0;i<n;i++){ 
        s[i]=c0[i];
        if(c0[i]) cc++;
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++) s[j]=c0[j];                            
        for(int j=0;j<n-i-1;j++)
            if(c0[j]=s[j]^s[j+1]) cc++;
    }
    if(cc==m) return 1;
    return 0;
}
void dfs(int id)
{
    if(id==n){
        cnt+=judge(c);return;
    }
    c[id]=0; 
    dfs(id+1);
    c[id]=1;
    dfs(id+1);
    return; 
}
int main(void)
{
    //freopen("C:\\Users\\Administrator\\Desktop\\in.txt","r",stdin);
    //freopen("C:\\Users\\Administrator\\Desktop\\out.txt","w",stdout);
    while(scanf("%d",&n)!=EOF)
    {
        memset(c,0,sizeof(c));
        m=(n+1)*n/2;
        if(m%2){ //小剪枝
            printf("%d %d\n",n,0);
            continue;
        }
        m/=2;
        cnt=0;
        dfs(0);
        printf("%d %d\n",n,cnt);
    }
    return 0; 
}
/*


*/

求得解后打表

 1 #include<stdio.h>
 2 int ans[25]={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};
 3 int main(void)
 4 {
 5     int n;
 6     while(scanf("%d",&n),n)
 7     {
 8         printf("%d %d\n",n,ans[n]);
 9     }
10     return 0;    
11 }

 

  

posted @ 2014-03-17 20:06  heaventouch  阅读(614)  评论(0编辑  收藏  举报