算法 符号三角形问题
来源:互联网 发布:ubuntu 安装 sublime 编辑:程序博客网 时间:2024/05/20 03:07
题目
在符号三角形中,有14个“+“和14个“-”。2个同号下面是+,两个异号下面是-。在一般情况下,符号三角形的第一行有n个符号。
符号三角形问题,要求对于给定的n,计算有多少个不同的符号三角形,使其所含的“+”和“-”相同。
分析
回溯法。亦或:同值亦或为0,不同亦或为1。
#include <stdio.h> #include <math.h>#define n 7 int sum;//不同的符号三角形数int count; //统计 "-"数int half; int **p; void dfs(int t){ int i,j; if( (count>half) || (t*(t-1)/2-count>half) ) return; if(t>n) sum++; else{ for(i=0; i<2; i++){//+ - p[1][t]=i;//第一层出来,后面就出来了 count+=i; for(j=2; j<=t; j++){ p[j][t-j+1]=p[j-1][t-j+1]^p[j-1][t-j+2];//上面两个亦或,相同为0,即"+",不相同为1,即"-" count+=p[j][t-j+1];//这里每次都加,亦或出0的不影响count值,所以统计的是"-" } dfs(t+1);//继续 for(j=2;j<=t;j++)//回去 count+=p[j][t-j+1]; count-=i; } } } int main(){ int i,j; sum=0; count=0; //对2取余为0才继续 half=(n+1)*n/2; if(half%2==1){ printf("没有!"); return 0; } //初始化二维数组 p=new int *[n+1]; for(i=0; i<n+1; i++) p[i]=new int[n+1]; for(i=0; i<n+1; i++) for(j=0;j<n+1;j++) p[i][j]=0; dfs(1); printf("%d\n",sum); return 0; }
0 0
- 算法 符号三角形问题
- 符号三角形问题
- 符号三角形问题
- 符号三角形问题
- ZQUOJ1923符号三角形问题
- 符号三角形问题
- 符号三角形问题
- 符号三角形问题
- 【a502】符号三角形问题
- 符号三角形问题
- 符号三角形问题
- 符号三角形问题
- 算法java实现--回溯法--符号三角形问题
- 算法设计_回溯法_符号三角形问题
- 符号三角形问题(回溯)-算法设计与分析
- 符号三角形问题C++代码
- 符号三角形问题 回溯法
- 回溯之符号三角形问题
- 四个月的蜕变之梦想起航的地方
- Poj_2253 Frogger(最短路-SPFA+Dijkstra)
- webpack详细使用方法
- 装载问题
- maven的继承和聚合关系
- 算法 符号三角形问题
- android 生成jar包里面包含资源文件
- opencv学习笔记(四)高斯滤波
- parent-child 关系介绍
- 杭电2548两军交锋
- Scikit-learn实战之最近邻算法
- springMVC版本和jdk版本不匹配造成的问题
- hdfs java操作
- SE复习日记【三】Life is short, you need Python