BZOJ 2331 地板(插頭DP)

2021-09-08 20:36:58 字數 1200 閱讀 8681

題意:給出乙個n*m的地面。有些是障礙。用l型的地板磚鋪滿。有多少種方案。

思路:用0表示沒有插頭,用1表示有插頭且可以拐彎,用3表示有插頭但是不能再拐彎了。

設有m列,輪廓線為[0,m]。對於格仔(i,j),設左插頭x上插頭y,那麼轉移有:

(1)x=0,y=0:此時如圖1-0,有三種轉移,分別是1-1,1-2,1-3;

(2)x!=0,y!=0:此時只有當x=y=1時可以轉移,就是合併插頭,如圖3-0;

(3)x和y中只有乙個不是0。不妨設y=0,x!=0,那次此時若x=3,可以延續或者停止;若x=1,可以合併或者可以拐彎。

struct node

void add(int s,int x)

}st[size]=s;

cnt[size]=x;

next[size]=head[t];

head[t]=size++;

}};node f[2];

int pre,cur;

int n,m;

char s[105][105];

void init()

}int getbit(int st,int k)

int set0(int st,int k)

int set1(int st,int k)

int set3(int st,int k)

void add(int s,int x)

void dp(int i,int j)

x=getbit(s,j-1);

y=getbit(s,j);

s=set0(s,j-1);

s=set0(s,j);

if(s[i][j]=='*')

if(!x&&!y)

else if(x&&y)

else if(x||y)

}}int main()

int ans=0;

for0(i,f[pre].size) if(f[pre].st[i]==0) ans=f[pre].cnt[i];

pr(ans);

}

BZOJ2331 SCOI2011 地板 題解

題面複製於洛谷 鋪設完成後,客廳裡面所有沒有柱子的地方都必須鋪上地板,但同乙個地方不能被鋪多次。輸入格式 輸入的第一行包含兩個整數,r和c,表示客廳的大小。接著是r行,每行c個字元。表示對應的位置是空的,必須鋪地板 表示對應的位置有柱子,不能鋪地板。輸出格式 輸出一行,包含乙個整數,表示鋪滿整個客廳...

2331 SCOI2011 地板 插頭DP

國際慣例的題面 十分顯然的插頭dp。由於r c 100,所以min r,c 10,然後就可以愉悅地狀壓啦。我們用三進製狀壓,0表示沒有插頭,1表示有乙個必須延伸至少一格且拐彎的插頭,2表示有乙個必須延伸一格且不可以拐彎的插頭。轉移的話就十分顯然了。00 22,表示用這個格仔作為開始的拐角。00 10...

bzoj 3232 圈地遊戲

題意 在乙個n m的網格裡,邊上有花費,格里有權值 從任意乙個點開始繞一圈,繞乙個簡單環出來,裡面的所有格仔就是收益 求最大的收益 花費 所有數 100 題解 考慮01分數規劃的方式,但是花費和權值不在一起 那麼考慮將格內的權值轉化到邊上 實際上將邊有向化,按邊方向左面一行的權值為正,右面為負,加起...