dfs搜尋剪枝技巧

2021-08-26 12:32:46 字數 831 閱讀 2400

1.當前搜到的東西劣於答案,或者當前搜到的加上之後能取到最最最優的(估價)依然劣於答案,return

2.對於第1點可以在搜前先估乙個答案上界

3.按一定順序列舉,如從小到大或從大到小,減少相同狀態

4.對第3點,在一大部分題裡從大到小枚更好,因為能更快得到乙個答案用於剪掉後面的

5.每層列舉時可判掉一些無用狀態

例題:1.洛谷p1731 [noi1999]生日蛋糕

// luogu-judger-enable-o2

// luogu-judger-enable-o2

#includeusing namespace std;

int n,m,r[20],h[20],ans=2e9;

int sigma(int x)

int s(int r,int h)

void dfs(int pos,int las,int res)}}

}int main()

2.zjoi2005 最少乘法次數

#pragma gcc optimize(3,"inline","ofast")

#define ll unsigned long long

#includeusing namespace std;

int n,ans=0;

bool vis[2010];

int a[30],mo[20];

void init()

void dfs(int pos,int mx)

return;

}int main()

搜尋剪枝DFS

tempter of the bone hdu1010 題意 給乙個圖,找出乙個看能否能在t的時間內從s到達d點 思路 bfs肯定不行,因為bfs找到的是最短時間的路徑,無法對在t時間點到達d點進行判斷 於是才想到了dfs,這個能把所有的情況遍歷一遍的演算法,雖然圖的長寬只有7,但是總是超時,這次終...

DFS搜尋 剪枝

hdu 5952 題意 給出一張無向圖,然後判斷這張圖中一共有多少個不同的大小為s的完全圖 完全圖的頂點數為s個 題目保證每個點的度不大於20。完全圖 n個點兩兩之間都有一條邊的圖叫完全圖。思路 由於頂點個數很少,而且每個點的度數最多是20,所以可以暴力優化,建圖,對於每個s點完全子圖,如果i點在子...

UVA 11882 dfs搜尋 bfs剪枝

uva 11882 dfs搜尋 bfs剪枝 給你乙個r c的數字矩陣,要求從任意乙個點開始走,只能上下左右走,求走的過數連線起來最大是多少。直接dfs每乙個數字,在每一層dfs中,加上bfs 判斷剩下的數連線起來能否大於當前的ans 不能的話 剪枝了。雖然思路是這樣的,但昨天一直tle,或許姿勢不對...