最優配對問題

2021-07-09 21:53:33 字數 1716 閱讀 6998

最優配對問題:空間裡有n個點p0,p1,…,pn-1,你的任務是把它們配成n/2對(n是偶數),使得每個點恰好在乙個點對中。所有點對中兩點的距離之和應盡量小。

1.設d(i, s)表示前i個點中,位於集合s中的元素兩兩配對的最小距離和

則狀態轉移方程 d(i,s)=min-

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define maxn 21

#define inf 1e10

struct nodenode[maxn];

int n;

double d[maxn][1

void dp()

}}int main()

2.用d(s)表示集合s中的元素兩兩配對的最小距離和

狀態轉移方程:d(s)=min-} i = max(s).

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define maxn 21

#define inf 1e10

struct nodenode[maxn];

int n;

double d[1

<1];

double dis(node &a, node &b)

void dp()

3.用遞迴實現第二種方法,則可不用計算s中的點個數為奇數的情況.

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define maxn 21

#define inf 1e10

struct nodenode[maxn];

int n;

double d[1

<1];

double dis(node &a, node &b)

double dp(int s)

int main()

input:

20 1 2 3

1 1 1

5 6 2

4 7 8

2 3 1

1 4 7

2 5 8

3 6 9

1 2 5

2 3 6

4 5 2

7 8 5

4 5 1

-1 2 3

-1 -9 -7

0 0 0

100 0 0

9 5 1

7 5 3

5 5 5

output:

119.076

最優配對問題(動態規劃)

空間裡有n個點p0,p1,p2.pn 1,你的任務是把他們配成n 2對 n是偶數 使得每個點恰好在乙個點對中。所有點的距離之和應該盡量小。n 20.定義狀態d i s 為前i個點中,位於集合s的元素兩兩配對的最小距離,則狀態轉移方程就是 d i,s min 其中 pipj 表示兩點之間的距離。邊界是...

jzoj 3420 最優配對問題

平面上有n個點p1,p2,pn,你的任務是把它們配成n 2對 n是偶數 使得每個點恰好在乙個點對中。所有點對中兩點的距離之和應盡量小。n 20,xi yi 10000。第一行輸入n 2到20之間的偶數 接下來n行,每行輸入兩個整數表示xi,yi。xi yi 10000。輸出最小配對距離。答案保留兩位...

集合上的動態規劃 最優配對問題

此部落格 題目 劉汝佳 演算法競賽入門經典 集合上的動態規劃 最優配對問題 題意 空間裡有n個點p0,p1,pn 1,你的任務是把它們配成n 2對 n是偶數 使得每個點恰好在乙個點對中。所有點對中兩點的距離之和應盡量小。狀態 d i,s 表示把前i個點中,位於集合s中的元素兩兩配對的最小距離和 狀態...