時間限制: 1 s
空間限制: 128000 kb
題目等級 : ** gold
題解如下圖是由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#include70分暴力#include
#include
#define maxn 2500
using
namespace
std;
intn,sum,ans;
intmap[maxn][maxn];
intjudgenum()
}for(int i=1;i<=n;i++) if(map[1][i]==0) bns++;
if(bns==sum-bns) return1;
else
return
0;
}void dfs(int now,int num1,int
num2)
map[
1][now]=1;dfs(now+1,num1+1,num2);map[1][now]=-1
; map[
1][now]=0;dfs(now+1,num1,num2+1);map[1][now]=-1;}
intmain()
memset(map,-1,sizeof
(map));
dfs(
1,0,0
);
cout
<
- + + - + + +
- + - - + +
- - + - +
+ - - -
- + +
- +
- */
#include#include#include
#include
#define maxn 2500
using
namespace
std;
intn,sum,ans;
intmap[maxn][maxn];
int anss[25]=;
intjudgenum()
}for(int i=1;i<=n;i++) if(map[1][i]==0) bns++;
if(bns==sum-bns) return1;
else
return
0;
}void dfs(int
now)
map[
1][now]=1;dfs(now+1);map[1][now]=-1
; map[
1][now]=0;dfs(now+1);map[1][now]=-1;}
intmain()
cout
<
/*for(n=1;n<=24;n++)
cout
- + + - + + +
- + - - + +
- - + - +
+ - - -
- + +
- +
- */
符號三角形問題
符號三角形問題 右圖所示的三角形中,有14個 和14個 2個同號下面是 兩個異號下面是 在一般情況下,符號三角形的第一行有n個符號。符號三角形問題,要求對於給定的n,計算有多少個不同的符號三角形,使其所含的 和 相同。解 首先要求產生的 與 的數量一樣多,所以當給定的n不能滿足 n 1 n 4 0的...
符號三角形(dfs)
問題描述 如下圖是由14個 和14個 組成的符號三角形,2個同號下面都是 2個異號下面都是 在一般情況下,符號三角形的第一行有n個符號,符號三角形問題要求對於給定的n,計算有多少個不同的符號三角形,使其所含的 和 的個數相同。解題思路 1 不斷改變第一行每個符號,搜尋符合條件的解,可以使用遞迴回溯 ...
符號三角形問題
如下圖是由14個 和14個 組成的符號三角形,2個同號下面都是 2個異號下面都是 1 2 3 4 5 6 7 在一般情況下,符號三角形的第一行有n個符號,符號三角形問題要求對於給定的n,計算有多少個不同的符號三角形,使其所含的 和 的個數相同。這是在書本中回溯裡的一道題目,回溯約等於深度優先搜尋 回...