code vs 3376 符號三角形

2022-04-04 17:42:52 字數 2100 閱讀 9132

時間限制: 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#include

#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

<

- + + - + + +

- + - - + +

- - + - +

+ - - -

- + +

- +

- */

70分暴力

#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,計算有多少個不同的符號三角形,使其所含的 和 的個數相同。這是在書本中回溯裡的一道題目,回溯約等於深度優先搜尋 回...