时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
 
 
 
题目描述 Description

如下图是由14个“+”和14个“-”组成的符号三角形, 2个同号下面都是“+”,2个异号下面都是“-”
- + + - + + +  
 - + - - + +  
  - - + - +  
   + - - -  
    - + +  
     - +  
      -

输入描述 Input Description

一个数n,表示符号三角形的第一行有n个符号

输出描述 Output Description

对于给定的n,计算有多少个不同的符号三角形,使其所含的“+”和“-”的个数相同(严禁打表!!!!!)

若不存在方案,输出-1

样例输入 Sample Input

4

样例输出 Sample Output

6

数据范围及提示 Data Size & Hint

对于90%的数据,n<=24;
对于另外10%的数据,请注意特殊情况。

分类标签 Tags 点此展开

思路:写了个搜索,发现只能卡到70分,然后就用这个暴力打了个表,然后就过了。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 2500
using namespace std;
int n,sum,ans;
int map[MAXN][MAXN];
int judgenum(){
int bns=,k;
for(int i=;i<=n;i++){
for(int j=;j<=n-i+;j++){
if(map[i-][j]!=map[i-][j+]) map[i][j]=,bns++;
else if(map[i-][j]==map[i-][j+]) map[i][j]=;
}
}
for(int i=;i<=n;i++) if(map[][i]==) bns++;
if(bns==sum-bns) return ;
else return ;
}
void dfs(int now,int num1,int num2){
if(now==n+){
if(judgenum()) ans++;
return ;
}
map[][now]=;dfs(now+,num1+,num2);map[][now]=-;
map[][now]=;dfs(now+,num1,num2+);map[][now]=-;
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++) sum+=i;
if(sum%!=){ cout<<"-1";return ; }
memset(map,-,sizeof(map));
dfs(,,);
cout<<ans;
}
/*
- + + - + + +
- + - - + +
- - + - +
+ - - -
- + +
- +
-
*/

70分暴力

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 2500
using namespace std;
int n,sum,ans;
int map[MAXN][MAXN];
int anss[]={,-,-,,,-,-,,,-,-,,,-,-,,,-,-,,,-,-,,};
int judgenum(){
int bns=,k;
for(int i=;i<=n;i++){
for(int j=;j<=n-i+;j++){
if(map[i-][j]!=map[i-][j+]) map[i][j]=,bns++;
else if(map[i-][j]==map[i-][j+]) map[i][j]=;
}
}
for(int i=;i<=n;i++) if(map[][i]==) bns++;
if(bns==sum-bns) return ;
else return ;
}
void dfs(int now){
if(now==n+){
if(judgenum()) ans++;
return ;
}
map[][now]=;dfs(now+);map[][now]=-;
map[][now]=;dfs(now+);map[][now]=-;
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++) sum+=i;
if(sum%!=){ cout<<"-1";return ; }
cout<<anss[n];
/*for(n=1;n<=24;n++){
memset(map,-1,sizeof(map));
dfs(1);if(ans==0){ cout<<"-1,";sum=0;continue; }
cout<<ans<<",";
ans=0;sum=0;
}*/
}
/*
- + + - + + +
- + - - + +
- - + - +
+ - - -
- + +
- +
-
*/

code vs 3376 符号三角形的更多相关文章

  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. 【a502】符号三角形问题

    Time Limit: 1 second Memory Limit: 32 MB [问题描述] 在一般情况下,符号三角形的第一行有n个符号.按照2个同号的下面是"+"号,2个异号的 ...

  7. 【HDOJ】2510 符号三角形

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

  8. HDU 2510 - 符号三角形

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

  9. 【CImg】三角形绘制算法实现

    这周的CV基础练习是简单的图形绘制:比如说矩形.三角形和圆心什么的.会发现其实矩形和圆形的实现思路都很直白,矩形只需要确认两个对角坐标就可以了,圆心只需要确认圆心和半径,接着就是简单的遍历各个像素点判 ...

随机推荐

  1. Magnetic Storms

    http://acm.timus.ru/problem.aspx?space=1&num=1126 简单的线段树求区间最值 #include <stdio.h> #include ...

  2. redis-缓存穿透,缓存雪崩,缓存击穿,并发竞争

    目录 缓存穿透 定义 解决方案 利用互斥锁 采用异步更新策略 使用布隆过滤器 空置缓存 缓存雪崩 定义 解决方案 给缓存的加一个随机失效时间 使用互斥锁 双缓存策略 缓存击穿 定义 解决方案 使用互斥 ...

  3. 数据库得到too many connections”错误信息

    查进程  show processlist删除进程  kill ID查完整sql  show full processlist; 连数据库   MySQL -S /tmp/mysql.sock   或 ...

  4. 知识记忆1:标志寄存器PSW

    8086CPU的flag寄存器结构如下: [ ] [ ] [ ] [ ] [OF][DF][IF][TF][SF][ZF][ ][AF][ ][PF][ ][CF] 其中debug中的显示为: 标志 ...

  5. MVC系列学习(七)-模板页

    1.新建一个MVC项目,选择基本 2.查看文件 看到VS为我们生成了一些东西 布局页面,Layout 指定了模板页 3.开始实例 首先控制器中的代码如下: 视图中代码如下: 1.在/Views/_Vi ...

  6. struts2.1.6存在中文乱码的bug

    如题,后续版本中已解决:可以通过添加filter的方式解决.

  7. linux设置库文件加载包含路径

    第一种方式vim /etc/ld.so.conf 将要包含的路径添加到此文件中退出重新登录使配置生效或者执行命令source /etc/ld.so.conf 另一种方式利用LIBRARY_PATH和L ...

  8. js基础---数字日期及运算

    显示年月日 var a=new Date; console.log(a); var year=a.getFullYear(); var month=a.getMonth()+1; var day=a. ...

  9. jQuery——尺寸位置

    获取宽:$(".box").width() 设置宽:$(".box").width(200) 获取高:$(".box").height() ...

  10. day02 python

    列表: : 在[ ]内,可以存放多个任意类型的值: 并以逗号隔开. 一般用于存放学生的爱好:课堂的周期等等... 例如: 定义一个学生列表,可存放多个学生 list(['钱垚', '李小龙', '张全 ...