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

2021-09-25 04:07:44 字數 1198 閱讀 4987

在平面上有n個點,現在要把他們拼成n/2對,拼接兩個點的代價是他們的平面距離,現在問代價總和最小是多少

4

8730 9323

-3374 3929

-7890 -6727

1257 4689

20366.60
2<=n<=20

用dfs每一次選1個數和當前數字匹配,如果當前數字選過了,就進入下一層

#include

#include

#define min(a,b) (a)<(b)?(a):(b)

using

namespace std;

int n,p[30]

;double ans,x[30]

,y[30];

double

dis(

int a,

int b)

//計算

void

dfs(

int dep,

double sum)

if(sum>=ans)

return

;//無法更新答案了

if(p[dep]

)dfs

(dep+

1,sum)

;//選過就直接下一層

else}}

intmain()

用bfs先造出乙個狀壓模型,然後用模型進行狀壓dp

#include

#include

#include

#include

#define min(a,b) (a)<(b)?(a):(b)

using

namespace std;

int n,tail=

1,q[

1<<21]

;double x[30]

,y[30

],f[

1<<21]

;intpd(

int x,

int y)

double

dis(

int a,

int b)

void

bfs(

)//製造模型

}voiddp(

)}intmain()

最優配對問題(集合上的動態規劃) 狀壓DP

題意 給出n個點的空間座標 n為偶數,n 20 把他們配成n 2對,問 怎樣配對才能使點對的距離和最小?題解 設dp s 為 狀態為s s代表著某個子集 時,它的最小距離和。1.對於乙個狀態s,首先要計算它減少兩個點後的狀態的最小距離和,然後當前狀態才能從這些狀態中轉移過來。2.如何轉移 對於狀態s...

jzoj 3420 最優配對問題

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

JZOJ4743 積木 狀壓dp

顯然是狀壓dpdp dp。設f s i 1.3 f s i 1.3 f s i 1.3 表示使用的積木集合是s ss,最後使用的是積木i ii,是以長 寬 高維度往上的最高值。列舉s ss,再列舉最近放置的積木i ii和接下來要放置的積木j jj。然後再列舉使用哪一維往上搭。轉移方程過於顯然了吧。也...