hdu 2510 符號三角形

2021-07-23 23:01:25 字數 1476 閱讀 9514

題目描述:

problem description

符號三角形的 第1行有n個由「+」和」-「組成的符號 ,以後每行符號比上行少1個,2個同號下面是」+「,2個異 號下面是」-「 。計算有多少個不同的符號三角形,使其所含」+「 和」-「 的個數相同 。 n=7時的1個符號三角形如下:

+ + - + - + + 

+ - - - - + 

- + + + - 

- + + - 

- + - 

- - 

+input

每行1個正整數n <=24,n=0退出.

output

n和符號三角形的個數. 

sample input

15 16 19 20 0

sample output

15 1896 16 5160 19 32757 20 59984

題目分析:

dfs,易知每乙個符號三角形都是由第一行所決定,當第一行確定了下來以後那麼後面的n-1行也就由題目中的規則唯一的確定了下來,這個道理相信許多人都知道,關鍵是如何去實現它,在這裡我也困擾了許久,最後突然想到我們也可以通過倒著做,即先確定最後一行的哪乙個數,這裡只要考慮兩種情況,要麼是『+』要麼是'-',然後呢,我們再推出他的上面一行,同樣,由於下面一行已經確定了,所以在這裡我們只要知道這一行的第乙個符號是什麼,那麼這一行的所有符號也就唯一確定了下來,在這裡我們也就只需要考慮兩種情況,要麼'+'要麼'-',所以也就是說,每一行都只要考慮第乙個符號,大大的減少複雜性

第一發深搜超時,用的打表暴力ac:

#include#include#include#include#include#includeusing namespace std;

#define ll long long

/*const int maxn=25;

int n;

ll anss;

int map[maxn][maxn];

ll ans[maxn];

void dfs(int m,int z,int f)//把數字三角形倒過來看,一共就兩種

return;

}if(m==1)

else

else

else}}

dfs(m+1,z+num_pos,f+num_neg);

//首位是1

num_pos=0;

num_neg=0;

map[m][1]=1;

num_pos++;

for(int i=2;i<=m;i++)

else

else}}

dfs(m+1,z+num_pos,f+num_neg);

}}*/int main()

*/ ll v=;

while(scanf("%d",&n)!=0&&n!=0)

return 0;

}

符號三角形 HDU 2510

符號三角形的 第1行有n個由 和 組成的符號 以後每行符號比上行少1個,2個同號下面是 2個異 號下面是 計算有多少個不同的符號三角形,使其所含 和 的個數相同 n 7時的1個符號三角形如下 input每行1個正整數n 24,n 0退出.outputn和符號三角形的個數.sample input15...

HDU 2510 符號三角形 暴力打表

符號三角形的 第1行有n個由 和 組成的符號 以後每行符號比上行少1個,2個同號下面是 2個異 號下面是 計算有多少個不同的符號三角形,使其所含 和 的個數相同 n 7時的1個符號三角形如下 input 每行1個正整數n 24,n 0退出.output n和符號三角形的個數.sample input...

搜尋專題訓練hdu2510符號三角形

符號三角形的 第1行有n個由 和 組成的符號 以後每行符號比上行少1個,2個同號下面是 2個異 號下面是 計算有多少個不同的符號三角形,使其所含 和 的個數相同 n 7時的1個符號三角形如下 input 每行1個正整數n 24,n 0退出.output n和符號三角形的個數.sample input...