題目描述:
problem description
符號三角形的 第1行有n個由「+」和」-「組成的符號 ,以後每行符號比上行少1個,2個同號下面是」+「,2個異 號下面是」-「 。計算有多少個不同的符號三角形,使其所含」+「 和」-「 的個數相同 。 n=7時的1個符號三角形如下:
+ + - + - + +
+ - - - - +
- + + + -
- + + -
- + -
- -
+input
每行1個正整數n <=24,n=0退出.
output
n和符號三角形的個數.
sample input
15 16 19 20 0sample 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...