符号三角形(hdu 2510 搜索+打表)
2015-12-06 19:01
399 查看
符号三角形
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1246 Accepted Submission(s):
664
[align=left]Problem Description[/align]
符号三角形的 第1行有n个由“+”和”-“组成的符号 ,以后每行符号比上行少1个,2个同号下面是”+“,2个异
号下面是”-“ 。计算有多少个不同的符号三角形,使其所含”+“ 和”-“ 的个数相同 。 n=7时的1个符号三角形如下:
+ + - + - + +
+ - - - - +
- + + + -
- + + -
- + -
- -
+
[align=left]Input[/align]
每行1个正整数n <=24,n=0退出.
[align=left]Output[/align]
n和符号三角形的个数.
[align=left]Sample Input[/align]
15
16
19
20
0
[align=left]Sample Output[/align]
15 1896
16 5160
19 32757
20 59984
打表代码:
#include <iostream> #include <cstring> #include <cstdio> using namespace std; int a[25]; char res[25][25]; int sum; bool count(int n) { int p1=0,p2=0; int i,j; for(i=1;i<=n;i++) { if(res[0][i]=='+') p1++; else p2++; } for(int i=1;i<n;i++) for(j=1;j<=n-i;j++) { res[i][j]=(res[i-1][j]==res[i-1][j+1]?'+':'-'); if(res[i][j]=='+') p1++; else p2++; } if(p1==p2) return 1; return 0; } void dfs(int n,int s) { int i,j; if(s>n) { if(count(n)) sum++; return; } res[0][s]='+'; dfs(n,s+1); res[0][s]='-'; dfs(n,s+1); return; } int main() { int n; int i,j; a[1]=a[2]=0; for(i=1;i<=20;i++) { sum=0; dfs(i,1); a[i]=sum; cout<<a[i]<<endl; } }
相关文章推荐
- 第十五周——项目一:验证算法
- Eclipse 设置自动提示
- Python基础07 函数
- Python基础06 循环
- Tomcat 发布项目 conf/Catalina/localhost 配置 及数据源配置
- Python基础05 缩进和选择
- 4-5 UVA1590 IP网络(IP Networks)
- C/C++经典面试题(持续更新)
- 学习笔记(3)——串
- saltstack相关的一些总结
- 1657 圆的划分问题
- 至Android虚拟机发送短信和拨打电话
- 自定义View 实现软键盘实现搜索
- BC 65 game
- ubuntu(虚拟机)中使用minicom
- ubuntu(虚拟机)中使用minicom
- js返回,页面暂存
- linux上安装mono发布.net网站步骤
- Redis高级进阶(二)
- (转)No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=arm64, VA 解决办法