符號三角形問題
右圖所示的三角形中,有14個「+「和14個「-」。2個同號下面是+,兩個異號下面是-。
在一般情況下,符號三角形的第一行有n個符號。符號三角形問題,要求對於給定的n,計算有多少個不同的符號三角形,使其所含的「+」和「-」相同。
解: 首先要求產生的『+』與『-』的數量一樣多,所以當給定的n不能滿足(n+1)*n%4==0的話一定不能構成符號三角形
其次明確三角形的產生情況取決於第一行的『+』、『-』號的情況
所以在解決此題的過程中需要進行第一行的構造,以此產生後面幾行的結果
構造第一行的過程中,從第乙個到最後乙個依次構造
此時使用p來儲存三角形,當p[i][j]=1時代表此處為『+』號,反之亦然
在構造三角形的過程中將『+』號的數量進行統計(因為p[i][j]為0,1所以直接加上就可以)。
在構造第一行的過程中是通過每次新增一位來進行,當第一行 新增一位的時候,
整個三角形就會 新增一行,而且剩餘的幾行都會新增一位
因此回溯的傳遞引數代表了第一行此時要構造的下標從0開始,n-1為最後一位。
當t==n時所有構造完成即到達解空間。
#include int n;
int half,count,sum;
int p[100][100];
void dfs(int t)
//當沒有達到最後一位時
for(int i=0;i<2;i++)
if(count<=half&&(t+1)*(t+2)/2-count<=half)
//滿足條件的時候進行第一行下一位即第t+1位的構造
dfs(t+1);
for(int j=1;j<=t;j++)
count-=p[j][t-j];
count-=i; }}
int main()
return 0;
}
符號三角形問題
如下圖是由14個 和14個 組成的符號三角形,2個同號下面都是 2個異號下面都是 1 2 3 4 5 6 7 在一般情況下,符號三角形的第一行有n個符號,符號三角形問題要求對於給定的n,計算有多少個不同的符號三角形,使其所含的 和 的個數相同。這是在書本中回溯裡的一道題目,回溯約等於深度優先搜尋 回...
符號三角形問題
輸入 n 1輸出不同方案的個數.注意 純打表必和諧掉,不信就試試 有限打表,測試輸入 期待的輸出 時間限制 記憶體限制 額外程序 測試用例 1 以文字方式顯示 2 3 以文字方式顯示 0 4 1秒64m 0 include include includeusing namespace std int...
符號三角形(dfs)
問題描述 如下圖是由14個 和14個 組成的符號三角形,2個同號下面都是 2個異號下面都是 在一般情況下,符號三角形的第一行有n個符號,符號三角形問題要求對於給定的n,計算有多少個不同的符號三角形,使其所含的 和 的個數相同。解題思路 1 不斷改變第一行每個符號,搜尋符合條件的解,可以使用遞迴回溯 ...