jzoj 3420 最優配對問題

2021-08-11 04:42:10 字數 895 閱讀 7204

平面上有n個點p1,p2,…,pn,你的任務是把它們配成n/2對(n是偶數),使得每個點恰好在乙個點對中。所有點對中兩點的距離之和應盡量小。n<=20,|xi|,|yi|<=10000。

第一行輸入n(2到20之間的偶數)

接下來n行,每行輸入兩個整數表示xi,yi。|xi|,|yi|<=10000。

輸出最小配對距離。答案保留兩位小數。

8730 9323

-3374 3929

-7890 -6727

1257 4689

20366.60

2<=n<=20

從這題開始狀壓的學習。

發現這個資料範圍很小,考慮用二進位制進行狀壓。

設乙個狀態f[i],表示把i轉化為二進位制之後,為1的位已配對好,所得的最大值。

強制選編號小的與編號大的進行配對。

每次列舉乙個i

找到i中為1的第一位,設為x 另外再列舉乙個y

則可得f[i]=max(f[i],f[i^((1<<(x-1))^(1<<(y-1)]+dis(x,y));

#include 

#include

#include

#include

#define inf 1000000007

#define fo(i,a,b) for (i=a;i<=b;i++)

using

namespace

std;

double f[2000000];

int x[25],y[25];

double dis(int i,int j)

int main()

printf("%.2lf",f[(1

<1]);

}

狀壓DP 最優配對問題(jzoj 3420)

在平面上有n個點,現在要把他們拼成n 2對,拼接兩個點的代價是他們的平面距離,現在問代價總和最小是多少 4 8730 9323 3374 3929 7890 6727 1257 468920366.602 n 20 用dfs每一次選1個數和當前數字匹配,如果當前數字選過了,就進入下一層 includ...

最優配對問題

最優配對問題 空間裡有n個點p0,p1,pn 1,你的任務是把它們配成n 2對 n是偶數 使得每個點恰好在乙個點對中。所有點對中兩點的距離之和應盡量小。1.設d i,s 表示前i個點中,位於集合s中的元素兩兩配對的最小距離和 則狀態轉移方程 d i,s min include include inc...

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

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