WC2008遊覽計畫(BZOJ2595)

2022-07-29 16:12:17 字數 2630 閱讀 3923

傳送門

time limit: 10 sec  memory limit: 256 mbsec  special judge

[submit][status]

第一行有兩個整數,n和 m,描述方塊的數目。

接下來 n行, 每行有 m 個非負整數, 如果該整數為 0, 則該方塊為乙個景點;

否則表示控制該方塊至少需要的志願者數目。 相鄰的整數用 (若干個) 空格隔開,

行首行末也可能有多餘的空格。

由 n + 1行組成。第一行為乙個整數,表示你所給出的方案

中安排的志願者總數目。

接下來 n行,每行m 個字元,描述方案中相應方塊的情況:

z  『_』(下劃線)表示該方塊沒有安排志願者;

z  『o』(小寫英文本母o)表示該方塊安排了志願者;

z  『x』(小寫英文本母x)表示該方塊是乙個景點;

注:請注意輸出格式要求,如果缺少某一行或者某一行的字元數目和要求不

一致(任何一行中,多餘的空格都不允許出現) ,都可能導致該測試點不得分。

4 4

0 1 1 0

2 5 5 1

1 5 5 1

0 1 1 0

6 xoox

___o

___o

xoox

對於100%的資料,n,m,k≤10,其中k為景點的數目。輸入的所有整數均在[0,2^16]的範圍內

ljcc930提供spj

出題者xxoo的真喪病-_-#

寫了好長時間了。。比較簡單的插頭dp。。儲存路徑也比較簡單。。wa了n次是因為。。我把x、o寫倒了。。

輪廓線以上的格仔表示有沒有選中,那麼對於乙個非景點格仔,如果可以不選,那麼要麼是i-1,j不選 ,要麼是i-1,j選了但是輪廓線上存在其他的格仔和i-1,j是乙個聯通塊。

codes:

1 #include

2 #include3 #include4 #include5 #include6 #include7 #include8

using

namespace

std;

9const

int n = 1

<<15;10

const

int hash = 10007;11

#define nxt (cur^1)

12#define for(i,n) for(int i=1;i<=n;i++)

13#define rep(i,l,r) for(int i=l;i<=r;i++)

14#define down(i,r,l) for(int i=r;i>=l;i--)

1516 pair< pair ,int > opt[n*110

];17

int pre[n*110

],optot;

18int loc,cur,n,m,maze[15][15],ans=1

<<30,code[15

];19

char ans[15][15

];20

21struct

statedp

24void push(int state,int ans,int last,int x,int y,int

kind)

32return;33

}34 f[size]=ans;st[size]=state;

35 loc[size]=++optot;

36 pre[optot]=last;opt[optot]=make_pair(make_pair(x,y),kind);

37 next[size]=head[key];head[key]=size++;38}

39 }dp[2

];40

41void

init()

4748

void decode(int

st)51

52int

encode()

61return

st;62}63

64void trans(int left,int

up)68

69void dpblank(int i,int j,int cur,int

kind)81}

82if(left&&up) trans(left,up);else

83if(left||up) code[j] = left +up;

84else code[j] = (5+(cnt++));

85 dp[nxt].push(encode(),dp[cur].f[k]+kind,dp[cur].loc[k],i,j,1

);86}87

}88void

dp()

96 rep(k,0,dp[cur].size-1

)104

}105 printf("

%d\n

",ans);

106}

107108

void printpath(int

i)117

}118

119int

main()

Wc2008 遊覽計畫 斯坦納樹

斯坦納樹的問題模型是 有乙個圖,要求保留圖中最少的邊 最小的邊權和使得某k個點相互連通。最小生成樹是斯坦納樹的一種特殊情況。我們用f i j s 表示方格中i,j位置與各個景點之間的聯通情況。如果景點數為3時,111表示全部聯通,101表示第二個景點沒有聯通。當然第x個景點的 f i j 1 狀態怎...

WC2008 遊覽計畫 狀壓dp

題面太鬼畜不粘了。題意就是給一張n m的網格圖,每個點有點權,有k個關鍵點,讓你把這k個關鍵點連成乙個聯通快的最小代價。題解 這題nmk都非常小,解法肯定是狀壓,比較一般的解法插頭dp,但不太好寫。但其實這道題是裸的斯坦納樹模型。斯坦納樹是最小生成樹的變形,在一般情況下是np問題,但在k規模較少時可...

BZOJ 2595 Wc2008 遊覽計畫

啊 斯坦納樹 好像很厲害啊 反正我之前不會。其實不知道實用性怎麼樣 畢竟複雜度不小。大概過程就是乙個狀壓dp spfa 列舉狀態 從小狀態更新大狀態 再對當前狀態做一次像spfa一樣的鬆弛操作 下面這個人講的不錯 可以去看看 為什麼我的 又那麼短 有點擔心優美度了 有誰提一下建議嗎2333 我覺得還...