码迷,mamicode.com
首页 > 其他好文 > 详细

nyoj 491 幸运三角形 (dfs + 打表 出现木马 哈哈)

时间:2015-07-28 10:43:46      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:dfs   nyoj491   nyoj 491   幸运三角形   

幸运三角形

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
描述

        话说有这么一个图形,只有两种符号组成(‘+’或者‘-’),图形的最上层有n个符号,往下个数依次减一,形成倒置的金字塔形状,除第一层外(第一层为所有可能情况),每层形状都由上层决定,相邻的符号相同,则下层的符号为‘+’,反之,为‘-’;如下图所示(n = 3 时的两种情况):

                                           技术分享

如果图中的两种符号个数相同,那这个三角形就是幸运三角形,如上图中的图(2).

输入
有多组测试数据(少于20组)。
每行含一个整数n(0<n<20)。
输出
输出相应的幸运三角形个数。
样例输入
3
4
样例输出
4
6
来源
原创
上传者
ACM_杨延玺

这道题 我吓哭了 我首先用的dfs  可是 我不输出换行 就提示崩溃 木马。。

可能我小白把。。对这个也不清楚。。就是木马

你看看  有知道的请告知一下。。。。技术分享


所以我就用上了换行   然后打表了,把结果在纸上记下来,虽然我19就运行了5分钟。。(我只运行了前19个)不过20应该在30分钟内能运行出来把

耐心等待。。。

#include<stdio.h>
int n,sum,sum1,sum2;
int b[21],c[21];
bool judge(int m)
{
	for(int i=0;i<m;i++)
	{
		if(c[i]==0)
		sum1++;
		if(c[i]==1)
		sum2++;
		if(c[i]==c[i+1])
		c[i]=1;
		else
		c[i]=0;
	}
	printf("\n");//就是这里 不换行就TM木马。。程序崩溃 吓哭了。。哪里会导致木马
	if(m!=0)
	judge(m-1);//共m层,计算全部
	if(sum1==sum2)
	return true;
	else
	return false;
}
void dfs(int star,int end)
{
	if(star==end)
	{
		for(int i=0;i<n;i++)//
		c[i]=b[i];
		sum1=sum2=0;
		if(judge(n))
		sum++;
		return ;
	}
	b[star]=0;//0表示-
	dfs(star+1,end);
	b[star]=1;//1表示+
	dfs(star+1,end);
}
int main()
{
	while(scanf("%d",&n)!=EOF)
	{
		if(n*(1+n)/2%2)
		printf("0\n");
		else
		{
			sum=0;
			dfs(0,n);
			printf("%d\n",sum);//把结果在纸上记下来
		}
	}
	return 0;
}

这是结果:

#include <stdio.h>
int main()
{
	int a[21]={0,0,0,4,6,0,0,12,40,0,0,171,410,0,0,1896,5160,0,0,32757,59984};
	while(scanf("%d",&n)!=EOF)
	{
		printf("%d\n",a[n]);
	}
	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

nyoj 491 幸运三角形 (dfs + 打表 出现木马 哈哈)

标签:dfs   nyoj491   nyoj 491   幸运三角形   

原文地址:http://blog.csdn.net/su20145104009/article/details/47101267

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!