題目鏈結poj2531
乙個有n個節點的圖(n≤由於n很小只有20,可以直接列舉,複雜度是22020 ),節點間距c給定,讓你把這個圖分為a、b兩類節點使得∑c
ij,(
i∈a,
j∈b)
最大,問這個最大值是多少。
∗202 超時。需要剪枝。這道題的剪枝技巧是:
採用深度優先搜尋的方法,對每乙個節點都做判斷是否應該移到另一組去,判斷的依據是移過去和不移過去哪個得到的和值比較大。如果移過去後值變小了則不移過去並且剪掉這條支路。這個剪枝策略的正確性證明還沒想出來,以後再補。
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
int n;
int c[25][25];
int a[25];
int ans;
void print()
int ans2=ans;
dfs(x+1,ans);
a[x]=1;
for(int i=1;iif(a[i]==1)ans2-=c[x][i];
for(int i=1;i<=n;i++)
if(a[i]==0)ans2+=c[x][i];
if(ans2>=ans)
a[x]=0;
}int main()
}
POJ 1011 搜尋剪枝
題意 給一堆木棒,這些木棒是由幾根長度相同的長木棒厥斷而成的,求最短的長木棒長度能厥成這些短的木棒。題解 所求長度肯定介於最長木棒和木棒之和中間,並且可以整除木棒之和。於是窮舉所有可能的值,選中乙個值之後,用dfs給木棒尋找組合,能找到就輸出。直接dfs會超時,所以需要剪枝。可以先排序,這樣相同的木...
POJ 2362 搜尋 剪枝
給出一些不同長度的小棒,問小棒全部用完是否能構成乙個正方形。通過特判來起到剪枝的作用 include include includeusing namespace std const int maxn 25 int a maxn bool vis maxn int n,l 記錄正方形邊長 bool ...
poj 1011 sticks(搜尋 剪枝)
題型 搜尋題 題意 此題堪稱最經典搜尋題。description 喬治拿來一組等長的木棒,將它們隨機地裁斷,使得每一節木棍的長度都不超過50個長度單位。然後他又想把這些木棍恢復到為裁截前的狀態,但忘記了初始時有多少木棒以及木棒的初始長度。請你設計乙個程式,幫助喬治計算木棒的可能最小長度。每一節木棍的...