符號三角形題解

2022-09-09 18:03:29 字數 2629 閱讀 6897

聽說有大佬覺得我發題面出來在湊字數,那就不發了吧

符號三角形

看到題目,爆搜,不用想太多,先來試一試。(寫的很 醜 麻煩,後面的**會慢慢變簡潔,大佬勿噴)

#include

#define zong n * (n + 1) / 4

const

int maxn =

105;

int n;

int ans[maxn]

;//ans[i]記錄當n = i時的答案

int sum0, sum1;

//分別記錄0(-)的個數,1(+)的個數

bool map[maxn]

[maxn]

;void

dfs(

int,

int)

;//填充

intmain()

}return0;

}void

dfs(

int x,

int y)

if(x ==1)

else

}else

else

}else

else}}

return

;}

如果你是這樣交的,你會得到郭老師給你的獎勵— time limit exceeded

恭喜恭喜

肯定是要剪枝的,我們再想一想剪枝的方法,注意「所含」+「 和」-「 的個數相同」這句話十分重要。

if

(n *

(n +1)

/2%2

==1)printf

("0\n"

);

//sum0表示0(-)的個數,sum1同理

if(sum0 > zong)

return;if

(sum1 > zong)

return

;

#include

#define zong n * (n + 1) / 4

const

int maxn =

105;

int n;

int ans[maxn]

;//ans[i]記錄當n = i時的答案

int sum0, sum1;

//分別記錄0(-)的個數,1(+)的個數

bool map[maxn]

[maxn]

;void

dfs(

int,

int)

;//填充

intmain()

}}return0;

}void

dfs(

int x,

int y)

if(sum0 > zong)

return

;//剪枝

if(sum1 > zong)

return

;//剪枝

if(x ==1)

else

}else

else

}else

else}}

return

;}

這樣提交你會發現:你還是得到了郭老師的獎勵,這是為什麼呢?我也不知道,網上查了查,函式呼叫時會耗時的,而這個**函式呼叫次數過多,就容易超時(不知道還有沒有其他原因,等待大佬的支援qaq)。

最開始我不知道什麼原因導致超時,就請求ljs大佬的支援,大佬就給出了乙個不一樣的解法,從下往上搜尋,列舉第一列的所有情況(其實和之前的方法是大同小異的,而函式呼叫次數會少很多,這樣就會節約時間呢qwq)。

同樣的,剪枝還是可以用,也是同樣的方法。

#include

#define zong n * (n + 1) / 2

const

int maxn =

105;

int n;

int ans[maxn]

;//ans[i]記錄當n = i時的答案

int sum;

//記錄1(+)的個數

bool map[maxn]

[maxn]

;void

dfs(

int)

;//填充

intmain()

}}return0;

}void

dfs(

int x)

for(

int i =

0; i <=

1; i++

)else

map[x]

[j]=0;

}// for(int j = 1; j <= x; j++)

// printf("\n");

// printf("%d\n", sum);

// printf("\n\n\n");

dfs(x +1)

;//繼續填

sum -

= i;

for(

int j =

2; j <= x; j++)}

}return

;}

給出解法後,ljs大佬就提醒我可以用位運算,既可以加快速度,還可以讓**簡化,並吐槽了我的**寫的很難看 我也這樣想呢

符號三角形問題

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