最小配對 tyvj 1196

2021-06-22 04:16:46 字數 734 閱讀 6188

tyvj 1196:

因為點只有20個,用搜尋就可以過,但是需要減枝一下,就是當當前計算的總距離大於已經記錄的最小距離和還有大的時候,這種情況可以直接剪掉。

還有乙個地方需要注意,在寫的時候沒注意到錯了好幾次。就是在搜尋過程中i迴圈一次以後就要break,因為這題是在列舉各種組合情況,所以(a, b)(c, d)和(c, d)(a, b)其實是一樣的,就不需要再重複計算。

比如說有四個點1, 2, 3, 4

程式會先搜到(1, 2)(3, 4)這種情況,如果不break的話,繼續往下搜就會出現9(3, 4)(1, 2)的情況。

#include #include #include struct node

;node p[30];

int n;

double ans, dis[30][30];

bool vis[30];

double f(node a, node b)

void dfs(int c, double s)

for(i = 0; i < n; i++)

}vis[i] = 0;

break;//注意這個break,保證在以後搜的情況之前沒有搜到過,這裡是組合不是排列

} }}int main (void)

} dfs(0, 0.0);

printf("%.2lf\n", ans);

} return 0;

}

BZOJ 1196 貪心 最小生成樹

這道題我們可以貪心,首先按建一級公路的花費從小到大排序,然後用最小生成樹的做法選出k條並做好標記,然後再按建一級公路和建二級公路的花費的最小值排序,再做一遍最小生成樹,更新答案。這樣做的正確性是因為先加入了有用的k條一級公路,並且滿足這些公路最大值最小,然後又按照最小生成樹的方法加邊,又滿足後加入的...

TYVJ 1307 聯絡員(最小生成樹)

kruskal裸題。水題紅色警報 include include include include include include using namespace std define rep i,n for int i 0 i define for1 i,a,n for int i a i n i ...

015拼多多 兩兩配對差值最小

問題描述 給定乙個長度為偶數的陣列arr,將該陣列中的數字兩兩配對並求和,在這些和中選出最大和最小值,請問該如何兩兩配對,才能讓最大值和最小值的差值最小?輸入描述 一共2行輸入。第一行為乙個整數n,2 n 10000,第二行為n個數,組成目標陣列,每個數大於等於2,小於等於100。輸出描述 輸出最小...