时间限制: 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. Ruby Range类

    创建: 2017/09/30    

  2. nodejs操作mysql

    var mysql = require('mysql');var pool = mysql.createPool({ host: 'localhost', user: 'root', password ...

  3. assistant: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by

    [oracle@oracledb button]$ assistantassistant: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' no ...

  4. Sorting It All Out 拓扑排序+确定点

    这一道题的话  数据有一点问题    ........     例如 不过 还是   能理解一下  试试吧  ......... A<B B<C C<A A<C B<A ...

  5. ACM_ZHANGZHANG喜欢手表

    ZHANGZHANG喜欢手表 Time Limit: 2000/1000ms (Java/Others) Problem Description: ZHANGZHANG刚过生日,收到了好朋友NENGN ...

  6. Unity学习-碰撞检测(七)

    Unity脚本说明 Unity支持语言: C#(主流),JavaScript,Boo 创建脚本: [Assets-Create-C# Script] 学习案例 布置场景: 添加一个Plane,3个Cu ...

  7. mysql简单增删改查(CRUD)

    先描述一下查看表中所有记录的语句以便查看所做的操作(以下所有语句建议自己敲,不要复制以免出错): user表,字段有 id, name,age,sex:id为主键,自增,插入时可以写 NULL 或者 ...

  8. Jquery EasyUI环境下设置下拉框选中指定选项

    前提: 要求点击某个按钮就将所有的下拉框都设置为选中第一个选项,因此,指定索引是最好的做法 尝试过的做法: html代码如下(easyui 的写法) <select class="ea ...

  9. Spring.net(v1.3.2) 官网API-第一章 前言

    虽然有很好的工具和技术,但是开发软件应用仍然是很困难的.Spring为构建企业级应用提供了一个轻量级的解决方案,Spring提供了一个统一的.透明的方式去配置你的应用,和将AOP集成到你的软件中.Sp ...

  10. win32动态库

    先讲一个基本的动态库,功能为自定义一个动态库,里面有一个函数MyMessage实现弹出MessageBox. 1. 先在头文件中定义: #ifdef __cplusplus #define EXPOR ...