題意:給出乙個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分數規劃的方式,但是花費和權值不在一起 那麼考慮將格內的權值轉化到邊上 實際上將邊有向化,按邊方向左面一行的權值為正,右面為負,加起...