【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 ...
随机推荐
- 【Good Bye 2017 A】New Year and Counting Cards
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 是元音字母或者是奇数就递增. [代码] #include <bits/stdc++.h> using namespace ...
- Spark MLlib LDA 源代码解析
1.Spark MLlib LDA源代码解析 http://blog.csdn.net/sunbow0 Spark MLlib LDA 应该算是比較难理解的,当中涉及到大量的概率与统计的相关知识,并且 ...
- 建立一个 Openshift "Do-It-Yourself" 应用
建立一个 Openshift "Do-It-Yourself" 应用 Openshift 的 "Do-It-Yourself" 就是自己可以编译定制 WEB ...
- AVCaptureSession音频视频采集
// // AudioVideoCaptureViewController.m // live // // Created by lujunjie on 2016/10/31. // Copyrigh ...
- v-for一定要与v-bind:key="id"连用
1. v-for: <div v-for="(item,index) in todolist" v-bind:key="item.id"> < ...
- cordova android
Image.png Image.png http://www.jscss.cc/2016/10/18/cordova.html 装一个全局的cordova: 官网介绍:http://cordova.a ...
- [D3] Make D3 v4 Charts Responsive with the viewBox attribute
Making SVGs responsive is unfortunately not as simple as adding some media queries. This lesson intr ...
- 想在子线程里面触发的信号的槽函数在子线程执行,信号槽连接必须使用DirectConnection 方式(即使跨线程,也可以强迫DirectConnection,而不能是AutoConnection)
Qt多线程的实现 1.继承QThread,重新run 2.继承Object,调用moveToThread方法 两种方法各有利弊:主要参考:http://blog.51cto.com/9291927/1 ...
- 数据库中暂时表,表变量和CTE使用优势极其差别
1 在写SQL时常常会用到暂时表,表变量和CTE,这三者在使用时各有优势: 1. 暂时表:分为局部暂时表和全局暂时表. 1.1局部暂时表,创建时以#开头,在系统数据库tempdb中存储. 在当前的链接 ...
- 辛星笔记之高质量JavaScript代码书写要点
首先本文章是http://www.zhangxinxu.com/wordpress/?p=1173 的读书笔记,读者能够自己到鑫旭的空间去阅读原文.这里我对其进行了简化. 可维护的代码的一些要求: ( ...