傳送門
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 #include2 #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 我覺得還...