Time Limit: 1 second

Memory Limit: 32 MB

【问题描述】

在一般情况下,符号三角形的第一行有n个符号。按照2个同号的下面是“+”号,2个异号的下面是“-”号的规则生成符号三角形。例如:

+ + - + - + +

 + - - - - +

  - + + + -

   - + + -

    - + -

     - -

      +

即是一个由14个“+”号和14个“-”号组成的符号三角形。要求对于给定的n,计算有多少个不同的符号三角形,使其所包含的“+”和“-”的个数相同。要求用回溯法求解此问题。

【输入格式】

仅有一行,包含一个整数N,表示第一行有N个字符。

【输出格式】

仅有一行,不同的符号三角形的个数;当个数为0时,输出“No solution”

【输入样例】

4

【输出样例】

6

【题目链接】:http://noi.qz5z.com/viewtask.asp?ID=a502

【题解】



先用一层dfs枚举第一层的样子;

O(2^n)

然后根据第一层处理出整张图的样子;(也用dfs)

然后用趋近于O(N^2)的时间复杂度

处理出整张图的样子的时候;

可以加一个判断

if (负号或正号个数>(1+n)*n/4) return;

这个剪枝挺强力的吧.

处理的时候可以把所有的符号都移到最左边;左对齐;

a[i][j]由a[i-1][j]和a[i-1][j+1]决定;

(为它们的异或值)

一开始可以加一个判断if (1+n)*n/2为奇数;

那么就不可能有解;

依我对这个平台的了解;

它肯定会出一个(1+n)*n/2为奇数,然后n特别大的数据点。

[斜眼笑]



【完整代码】

#include <cstdio>

int n,ans = 0,temp;
int a[100][100]; void dfs2(int x,int y,int z,int f)
{
if (z>temp || f > temp)
return;
if (x>n)
{
ans++;
return;
}
if (y>n-x+1)
{
dfs2(x+1,1,z,f);
return;
}
a[x][y] = a[x-1][y] ^ a[x-1][y+1];
if (a[x][y]==1)
dfs2(x,y+1,z+1,f);
else
dfs2(x,y+1,z,f+1);
} void dfs1(int x,int z,int f)
{
if (x > n)
{
dfs2(2,1,z,f);
return;
}
a[1][x] = 1;
dfs1(x+1,z+1,f);
a[1][x] = 0;
dfs1(x+1,z,f+1);
} int main()
{
scanf("%d",&n);
if (((1+n)*n/2)&1)
{
puts("No solution");
return 0;
}
temp = (1+n)*n/4;
dfs1(1,0,0);
if (ans==0)
puts("No solution");
else
printf("%d\n",ans);
return 0;
}

【a502】符号三角形问题的更多相关文章

  1. OpenJudge 2990:符号三角形 解析报告

    2990:符号三角形 总时间限制:  1000ms       内存限制:  65536kB 描述 符号三角形的第1行有n个由“+”和”-“组成的符号 ,以后每行符号比上行少1个,2个同号下面是”+“ ...

  2. 符号三角形——F

    F. 符号三角形 Time Limit: 1000ms Memory Limit: 32768KB 64-bit integer IO format:      Java class name: 符号 ...

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

    符号三角形 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  4. 符号三角形_hdu_2510(深搜).java

    http://acm.hdu.edu.cn/showproblem.php?pid=2510 Time Limit: 2000/1000 MS (Java/Others)    Memory Limi ...

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

    符号三角形 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  6. code vs 3376 符号三角形

    3376 符号三角形  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 如下图是由14个“+”和14个“-”组 ...

  7. 【HDOJ】2510 符号三角形

    暴力打表. #include <cstdio> ]={,,,,,,,,,,,,,,,,,,,,,,,,}; int main() { while (scanf("%d" ...

  8. HDU 2510 - 符号三角形

    DFS后打表 #include <iostream> using namespace std; ,,,,,,,,,,,,,,,,,,,,,,,,}; int main() { int n; ...

  9. *HDU2510 DFS

    符号三角形 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

随机推荐

  1. 安卓手机运行WINDOWS

    http://www.pcdiy.com.tw/detail/1974 我的ZenFone 2手机可以跑Windows啦! 就在台风来袭,有人正准备去泛舟的那天,国外的XDA论坛神人则是选择让自己的Z ...

  2. 全球可信并且唯一免费的HTTPS(SSL)证书颁发机构:StartSSL

    全球可信并且唯一免费的HTTPS(SSL)证书颁发机构:StartSSL http://blog.s135.com/startssl/ 购买权威机构的证书一年大概得七八千元,其实这是不值得的,所以一直 ...

  3. 119.WIN32窗口原理

    #include <Windows.h> //处理消息的回调函数 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WIN ...

  4. Iptables-主机防火墙设置

    基于Iptables构建主机防火墙 Iptables优点: 数据包过滤机制,它会对数据包包头数据进行分析. 1.1.1 加载相关薄块到内核 [root@centos7 ~]# lsmod | egre ...

  5. 上拉刷新,下拉加载(JQuery)

    <script type="text/javascript">        $(document).ready(function() {            $(w ...

  6. 【2017中国大学生程序设计竞赛 - 网络选拔赛 && hdu 6154】CaoHaha's staff

    [链接]点击打开链接 [题意] 给你一个面积,让你求围成这个面积最少需要几条边,其中边的连线只能是在坐标轴上边长为1的的线或者是两个边长为1 的线的对角线. [题解] 找规律题 考虑s[i]表示i条边 ...

  7. 一个Java8模型的batch队列

    有点小问题,cpu过高,但是思路不错: http://www.tuicool.com/articles/URz2i2q

  8. 哈夫曼树的介绍 ---java实现

    一.     什么是哈夫曼树 是一种带权路径长度最短的二叉树,也称最优二叉树 带权路径长度:WPL=(W1*L1+W2*L2+W3*L3+...+ Wn*Ln) N个权值Wi(i=1,2,...n)构 ...

  9. vue使用(二)

    本节目标:           1.数据路径的三种方式          2.{{}}和v-html的区别 1.绑定图片的路径 方法一:直接写路径 <img src="http://p ...

  10. [React Intl] Render Content with Placeholders using react-intl FormattedMessage

    Learn how to use react-intl to set dynamic values into your language messages. We’ll also learn how ...