【a502】符号三角形问题
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】符号三角形问题的更多相关文章
- OpenJudge 2990:符号三角形 解析报告
2990:符号三角形 总时间限制: 1000ms 内存限制: 65536kB 描述 符号三角形的第1行有n个由“+”和”-“组成的符号 ,以后每行符号比上行少1个,2个同号下面是”+“ ...
- 符号三角形——F
F. 符号三角形 Time Limit: 1000ms Memory Limit: 32768KB 64-bit integer IO format: Java class name: 符号 ...
- 符号三角形(hdu 2510 搜索+打表)
符号三角形 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- 符号三角形_hdu_2510(深搜).java
http://acm.hdu.edu.cn/showproblem.php?pid=2510 Time Limit: 2000/1000 MS (Java/Others) Memory Limi ...
- hdu 2510 符号三角形 (DFS+打表)
符号三角形 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- code vs 3376 符号三角形
3376 符号三角形 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 如下图是由14个“+”和14个“-”组 ...
- 【HDOJ】2510 符号三角形
暴力打表. #include <cstdio> ]={,,,,,,,,,,,,,,,,,,,,,,,,}; int main() { while (scanf("%d" ...
- HDU 2510 - 符号三角形
DFS后打表 #include <iostream> using namespace std; ,,,,,,,,,,,,,,,,,,,,,,,,}; int main() { int n; ...
- *HDU2510 DFS
符号三角形 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
随机推荐
- 【2017"百度之星"程序设计大赛 - 初赛(B)】Chess
[链接]http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=776&pid=1001 [题意] 在这里写题意 [题 ...
- 洛谷 P2240 数的计数数据加强版
P2240 数的计数数据加强版 题目背景 无 题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数n): 先输入一个自然数n(n<=1500001),然后对此自然数按照如下方法进行处理: ...
- 洛谷 P1893 山峰暸望
P1893 山峰暸望 题目描述 一天,Bessie在眺望美丽的威斯康星的群山的时候,她突然产生了疑问:那座山是最宽的? 她决定在地平线上,利用她的新式大量程山峰高度测量仪依次做N (1 <= N ...
- Skill of vim
用vim也有一段时间了,谨以此记下一些有意思的技巧. 跳转 hjkl,左下右上. b/e跳转到上/下一个单词 ^/$跳转到行头/尾 从{,[,(,相应的},],)相互跳转.能够用% 跳转到局部变量的定 ...
- Activity启动过程源代码分析
事实上写分析源代码文章总会显得非常复杂非常乏味,可是梳理自己看源代码时的一些总结也是一种提高. 这篇博客分析下Activity启动过程源代码,我会尽量说得简单点. 个人的观点是看源代码不能看得太细,否 ...
- [转载]Google Java Style 中文版
转自:http://www.blogjava.net/zh-weir/archive/2014/02/08/409608.html Google Java Style 中文版 基于官方文档20 ...
- event事件对象 兼容写法:var oEvent=ev||event;和取消事件冒泡
要在整个页面添加事件要使用document,例如要捕抓鼠标位置 document.onclink=function(ev) //FireFox Chrome默认都是有一个值传进来的 { var oE ...
- Android BuildConfig:Gradle自定义你的BuildConfig
在很早之前我发布了这篇博客Android BuildConfig.DEBUG的妙用, 提到了Eclipse中通过BuildConfig.DEBUG字段用来调试Log非常好用,但是殊不知在Android ...
- LeetCode_Construct Binary Tree from Preorder and Inorder Traversal
一.题目 Construct Binary Tree from Preorder and Inorder Traversal My Submissions Given preorder and ino ...
- 第一个Python程序(全面)
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 一.Windows系统 1.编写Python程序方式之Sublime文本编辑器: 1>打开sublime,创建hello.p ...