UVa 10944 狀態壓縮DP

2021-06-22 10:15:19 字數 916 閱讀 1630

第一道狀態壓縮dp題,感覺要好好學習這種思維方式;

首先設l的位置為:pointx[0],pointy[0];其他節點的位置為:pointx[i],pointy[i];

然後求出各個節點之間的距離dis[i][j]=max;

我們用乙個n位2進製數(bn-1,...,b0)表示堅果收集情況的組合狀態;

其中bi=0表示第i+1個堅果沒有收集,bi-1表示第i+1個堅果收集了。

設堅果目前被收集的狀態為j,其中最後被收集的堅果為i,最小步數為f[i][j].

顯然初始化的時候:f[i][2的i-1次冪]=dis[0][i];

狀態i:按照遞增順利列舉狀態值

階段j:列舉狀態i中最後被收集的堅果j (i<=j<=n,i&2的j-1次冪!=0)

決策k:列舉狀態i外的堅果k(1<=k<=n,i&2的k-1次冪==0),

f[k][i+2的k-1次冪]=min( f[k][i+2的k-1次冪] , f[j][i]+dis[j][k] );

所以最後的結果為:

ans=min(f[i][2的n-1次冪]+dis[0][i]) (1<=i<=n);

下面是**,沒有給注釋,我的任務就是說一下思路,思路懂了,其他的都是小事。。。

#include#include#include#include#include#define inf 1<<22

using namespace std;

int x,y,num,ans,max;

char ch[22][22];

int dis[22][22];

int pointx[22],pointy[22];

int f[22][inf];

int abs(int a)

void init()

{ int i,j;

max=(1<

UVA 6625 狀態壓縮dp

這個題目的意思是給定k,n k,n 7 並給定k行每行有幾個連續的空格,所有的行左對齊,每一行最多7個,下面的行的空格數 上面相鄰行的空格數 給定乙個填數字的規則,當對於任意位置i,j num i j num i 1 j num i j num i j 1 問有 只用數字1 n 有多少種填滿空格的方...

uva11795 簡單狀態壓縮DP

一看到n 16就想到狀態壓縮dp了,而且只要儲存這個狀態就行了 轉移時也用狀態壓縮的轉移方法,比較兩個二進位制數,就能知道能否從已知狀態轉移到需要的狀態 開始沒看到題目給的就是二進位制數,自己還轉換成了二進位制 還有要記得用longlong 不能因為這個wa 還有位運算還不是很熟悉,可以用異或來去掉...

狀態壓縮DP

首先,我們以一道狀壓經典題tsp來引入。tsp問題 一張圖上有n個點,給定相應的鄰接矩陣,需要求出從0號節點出發,經過且只經過每個頂點一次,最後仍回到0號節點的最小邊權。思路 假設現在已訪問過的頂點集合 起點0當作還未訪問過的頂點 為s,當前所在頂點為v,用dp s v 表示從v出發訪問剩餘的所有頂...