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. 【2017"百度之星"程序设计大赛 - 初赛(B)】Chess

    [链接]http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=776&pid=1001 [题意] 在这里写题意 [题 ...

  2. 洛谷 P2240 数的计数数据加强版

    P2240 数的计数数据加强版 题目背景 无 题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数n): 先输入一个自然数n(n<=1500001),然后对此自然数按照如下方法进行处理: ...

  3. 洛谷 P1893 山峰暸望

    P1893 山峰暸望 题目描述 一天,Bessie在眺望美丽的威斯康星的群山的时候,她突然产生了疑问:那座山是最宽的? 她决定在地平线上,利用她的新式大量程山峰高度测量仪依次做N (1 <= N ...

  4. Skill of vim

    用vim也有一段时间了,谨以此记下一些有意思的技巧. 跳转 hjkl,左下右上. b/e跳转到上/下一个单词 ^/$跳转到行头/尾 从{,[,(,相应的},],)相互跳转.能够用% 跳转到局部变量的定 ...

  5. Activity启动过程源代码分析

    事实上写分析源代码文章总会显得非常复杂非常乏味,可是梳理自己看源代码时的一些总结也是一种提高. 这篇博客分析下Activity启动过程源代码,我会尽量说得简单点. 个人的观点是看源代码不能看得太细,否 ...

  6. [转载]Google Java Style 中文版

    转自:http://www.blogjava.net/zh-weir/archive/2014/02/08/409608.html Google Java Style 中文版     基于官方文档20 ...

  7. event事件对象 兼容写法:var oEvent=ev||event;和取消事件冒泡

    要在整个页面添加事件要使用document,例如要捕抓鼠标位置 document.onclink=function(ev)  //FireFox Chrome默认都是有一个值传进来的 { var oE ...

  8. Android BuildConfig:Gradle自定义你的BuildConfig

    在很早之前我发布了这篇博客Android BuildConfig.DEBUG的妙用, 提到了Eclipse中通过BuildConfig.DEBUG字段用来调试Log非常好用,但是殊不知在Android ...

  9. LeetCode_Construct Binary Tree from Preorder and Inorder Traversal

    一.题目 Construct Binary Tree from Preorder and Inorder Traversal My Submissions Given preorder and ino ...

  10. 第一个Python程序(全面)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 一.Windows系统 1.编写Python程序方式之Sublime文本编辑器: 1>打开sublime,创建hello.p ...