SCOI2008 著色方案

2022-08-18 23:27:15 字數 1992 閱讀 9412

給你$k$種顏料,每種顏料有$c_$

份,每份顏料塗一塊木板,求恰好用完所有顏料且相鄰兩木板顏色不同的塗色方案種數.($1\leq k\leq 15$,$1\leq c_\leq 5$)

由於此題資料較小,考慮dp套組合數學,但重複dp運算量極大,考慮記憶化搜尋優化.又因為每種顏料至多5份,模擬烏龜棋,我們可以開乙個五維陣列儲存狀態,但考慮相鄰木板顏色不同,於是再加乙個維度last,表示我們當前的狀態是由上次塗了能夠塗last次的狀態轉移過來,所以可以用組合減掉不合法方案.思路有點抽象,下面來點形象(更抽象)的狀態轉移方程

$if\left(a\right)$ $res+=\left(a-\left(last==2\right)\right)*dfs\left(a-1,b,c,d,e,1\right);$

$if\left(b\right)$ $res+=\left(b-\left(last==3\right)\right)*dfs\left(a+1,b-1,c,d,e,2\right);$

$if\left(c\right)$ $res+=\left(c-\left(last==4\right)\right)*dfs\left(a,b+1,c-1,d,e,3\right);$

$if\left(d\right)$ $res+=\left(d-\left(last==5\right)\right)*dfs\left(a,b,c+1,d-1,e,4\right);$

$if\left(e\right)$ $res+=e*dfs\left(a,b,c,d+1,e-1,5\right);$

其中$k-\left(last==x\right)$表示上一次轉移的時候若用了剩餘x種的顏料,那現在就得減掉1(即那種用掉的)

#include#include

#include

#include

#include

#include

#include

#define mod 1000000007

#define r register

#define next exnt

#define debug puts("mlg")

using

namespace

std;

typedef

long

long

ll;typedef

long

double

ld;typedef unsigned

long

long

ull;

inline ll read();

inline

void

write(ll x);

inline

void

writesp(ll x);

inline

void

writeln(ll x);

ll k;

ll f[

16][16][16][16][16][6

];ll num[

16];

ll ans;

inline ll dfs(ll a,ll b,ll c,ll d,ll e,ll last)

intmain()

memset(f,-1,sizeof

f); writeln(dfs(num[

1],num[2],num[3],num[4],num[5],0

));}

inline ll read()

while(ch>='

0'&&ch<='9'

)

return x*t;

}inline

void

write(ll x)

if(x<=9)

write(x/10);putchar(x%10+'0'

);}inline

void

writesp(ll x)

inline

void

writeln(ll x)

SCOI2008 著色方案

time limit 10 sec memory limit 162 mb submit 2228 solved 1353 submit status discuss 有n個木塊排成一行,從左到右依次編號為1 n。你有k種顏色的油漆,其中第i種顏色的油漆足夠塗ci個木塊。所有油漆剛好足夠塗滿所有木塊...

SCOI2008 著色方案 (狀態壓縮)

題目鏈結 description 有n個木塊排成一行,從左到右依次編號為1 n。你有k種顏色的油漆,其中第i種顏色的油漆足夠塗ci個木塊。所有油漆剛好足夠塗滿所有木塊,即c1 c2 ck n。相鄰兩個木塊塗相同色顯得很難看,所以你希望統計任意兩 個相鄰木塊顏色不同的著色方案。input 第一行為乙個...

SCOI2008 著色方案 高維dp

輸入檔案 color.in輸出檔案 color.out簡單對比 時間限制 1 s 記憶體限制 64 mb 題目背景 有n個木塊排成一行,從左到右依次編號為1 n。你有k種顏色的油漆,其中第i 種顏色的油漆足夠塗ci 個木塊。所有油漆剛好足夠塗滿所有木塊,即 c1 c2 ck n。相鄰兩個木塊塗相同色...